[Python] Multiple primary key? Era: Red Baron

Giovanni Porcari giovanni.porcari a softwell.it
Sab 27 Giu 2015 23:20:39 CEST


> Il giorno 27/giu/2015, alle ore 18:17, Giovanni Porcari <giovanni.porcari a softwell.it> ha scritto:
> 
>> Piu` che altro, mettere un id a tutti i costi non significa che il record da esso identificato sia univoco. A tal proposito, Davide Bianchi scrisse un articolo che esprime meglio il mio pensiero: http://soft-land.org/documenti/pk

Mi sono letto questo articolo e devo dire che dissento su quasi tutto. 
L’idea di una fkey composta da 7 campi che possono mutare mi procura
una crisi d’ansia che nemmeno una damigiana di camomilla riuscirebbe
a calmare. Per non parlare di un sistema ipotetico dove sia possibile
introdurre n record identici perchè tutti con solo campi nulli. Mi pare
che se la progettazione consente questi buchi di logica sarebbe
preferibile cambiare mestiere :)

L’idea che un entità sia definibile in modo univoco in base ad 
n attributi mutabili e che ci possano essere magari decine di migliaia
di record che replicano le n colonne mutabili per gestire la relazione
mi sembra francamente un disegno che si presta a brutte sorprese.

L’identificativo (io non uso un id numerico ma un UUID) mi garantisce
la relazione indipendentemente dai valori. Credo anche (ma può darsi
che le cose siano ora diverse) che una relazione su una sola colonna
sia in termini di ottimizzazione delle join più veloce rispetto
ad una relazione su n colonne replicate (a meno di non creare comunque
una chiave somma delle n chiavi).

In Genropy nella definizione di una tabella si dichiara la pkey
e il caption_field. La prima è per uso interno  mentre il secondo è per 
gli esseri umani. Per un cliente il caption_field potrebbe
essere la concatenazione di ragione sociale e città, per una fattura
il numero e la data, per un paziente il cognome nome e data nascita.
La colonna caption_field e nella maggior parte dei casi non
una colonna reale ma quella che noi chiamiamo ‘formulaColumn’
ovvero un frammento di SQL che definisce la concatenazione.

Da moltissimi anni usiamo questo sistema (banale direi) e il rischio
di duplicazioni e omonimie è ridotto al fisiologico.

Ciao 

G





Maggiori informazioni sulla lista Python