Blog ❯ Autore: Fabio Moschini|Data: 13.10.2022
Confronto tra strutture di database
DatabaseSql

Come confrontare le strutture di due database
Nel precedente articolo, abbiamo visto come utilizzare INFORMATION_SCHEMA per avere informazioni sui metadati di un database.Ora vedremo come sfruttare questo strumento per confrontare le strutture di due database con l'obiettivo di evidenziare le differenze tra di essi.
JOIN: breve ripasso
Attraverso l'utilizzo delle JOIN, è possibile leggere dati correlati tra due o più tabelle.Le condizioni di JOIN indicano al motore SQL come leggere le righe da una tabella in funzione dei dati presenti sulle righe di un'altra tabella e sono espresse tramite i comandi SQL:
- INNER JOIN: seleziona e mette in relazione le righe di due tabelle per le quali c'è una corrispondenza dei valori nelle colonne indicate per la correlazione:![alt text for image]()
- LEFT OUTER JOIN (LEFT JOIN): seleziona tutte le righe della prima tabella (quella di sinistra) con le righe della seconda tabella (quella di destra) che soddisfano la condizione di join. Le righe della prima tabella senza corrispondenza nella seconda sono estese con valori nulli:![alt text for image]()
- RIGHT OUTER JOIN (RIGHT JOIN): lavora in modo simmetrico rispetto alla LEFT OUTER JOIN, ovvero seleziona tutte le righe della seconda tabella (quella di destra) con le righe della prima tabella (quella di sinistra) che soddisfano la condizione di join. Le righe della seconda tabella senza corrispondenza nella prima sono estese con valori nulli:![alt text for image]()
- FULL OUTER JOIN (FULL JOIN): seleziona tutte le righe della prima e della seconda tabella, ottenute con LEFT OUTER JOIN e RIGHT OUTER JOIN:![alt text for image]()
Quale JOIN utilizzare per il nostro obiettivo?
Attraverso l'operazione di FULL OUTER JOIN (equivalente a FULL JOIN) possiamo determinare le tabelle definite soltanto in uno dei due database.Per fare questo, è sufficiente applicare questo tipo di JOIN alle tabelle DB_Source.INFORMATION_SCHEMA.TABLES e DB_Target.INFORMATION_SCHEMA.TABLES, dove DB_Source e DB_Target sono i due database da analizzare:
Il risultato della query è:

In modo analogo, possiamo determinare le differenze anche a livello di colonne:
Questo script evidenzia le colonne definite soltanto in uno dei due database. Sono elencate anche tutte le colonne appartenenti a tabelle presenti soltanto in un database. Il risultato della query è:

Con la stessa tecnica, è possibile determinare le differenze anche per quanto riguarda le altre tipologie di entità definite su un database, come vincoli d'integrità, indici, chiavi primarie, stored procedure o function, trigger.



