Mondi su mondi, sistemi di sistemi.

Chiavi Composite

Questo post è il clas­sico esem­pio dell’eterna dia­triba su quale sia il miglior tipo di chiave da usare in un data­base, in que­sto caso con l’aggiunta della variante sulle chiavi com­po­site e dalla pro­spet­tiva dell’applicazione.

A mio parere il pro­blema del post – non ho letto i com­menti – è che sem­pli­fica troppo la que­stione, non tenendo conto dei difetti della solu­zione con chiavi sin­te­ti­che (o surrogate).

Il punto da cui par­tire è: cosa signi­fi­cano le chiavi com­po­site? Beh, ci danno un’informazione riguardo ai vin­coli d’integrità del data­base. Ad es. date due tabelle, “Utenti” e “Gruppi” e una tabella di join, la chiave com­po­sita sulla tabella di join, for­mata dalle chiavi pri­ma­rie di “Gruppi” e “Utenti” ci dice un utente non può – ovvia­mente – appar­te­nere due volte allo stesso gruppo. Anche se usas­simo una chiave pri­ma­ria sur­ro­gata, que­sto vin­colo deve rima­nere comun­que e per farlo rispet­tare ci sarà pre­su­mi­bil­mente biso­gno di un ulte­riore indice sulle due foreign keys.

Insomma, se è vero che le chiavi com­po­ste sono meno “maneg­ge­voli”, biso­gna anche ricor­dare qual’è il prezzo da pagare per le solu­zioni alter­na­tive. Aggiungo anche che fra­mework come l’EOF ren­dono molto sem­plice lavo­rare con que­ste configurazioni.

C’è un solo caso, comun­que piut­to­sto fre­quente in design nor­ma­liz­zati, in cui use­rei una chiave sin­te­tica e si pre­senta nel momento in cui ci sono delle foreign key che pun­tano alla chiave pri­ma­ria com­po­sta. In que­sta situa­zione usare tutti i com­po­nenti della chiave pri­ma­ria per creare il vin­colo d’integrità diventa rapi­da­mente impra­ti­ca­bile. Dev’essere però chiaro che si tratta di una neces­sità pra­tica e non di modellazione.

Per proseguire

Commenti e trackback sono disabilitati.