[Db] [mySQL] se non c'è crealo!
Domenico L.
domenico.lorusso a pleiade.it
Mer 15 Nov 2006 13:05:40 CET
Davide Michel 'ZioBudda' Morelli ha scritto:
> Domenico L. ha scritto:
>>
>> L'utilizzo dei campi numerici autoincrement come chiavi primarie è un
>> approccio ampiamente superato e che spesso da più problemi che vantaggi.
>
> Ciao, spieghi meglio questo concetto ?
Lasciando perdere le polemiche che mi sembrano fuori luogo, il concetto
non ha nulla a che vedere con il rdbms di riferimento e non si rifà
neppure a problemi di performance.
Le basi dati dovrebbero essere ben organizzate e "facilemente" fruibili,
l'utilizzo abnorme di chiavi surrogate porta spesso ad una crescita di
join per raccimolare i dati; e, non vi porto i dati perché queste sono
cose note, una join è molto più pesante di un confronto tra attributi,
solitamente si tende a dire che il peso dei confronti è trascurabile.
Ora facciamo un esempio che forse spiega meglio quello che voglio dire:
Se per me è chiave la sequenza di 12 caratteri che mi identifica
regione-provincia-comune-filiale, suddiviso in 4 campi, se decido di
portarmi appresso questi 4 campi nelle tabelle di dettaglio (quelle che
per intenderci sono legate 1-n)
quindi
tabella padre:
regione char(3)
provincia char(3)
comune char(3)
filiale char(3)
....
tabella figlo:
regione char(3)
provincia char(3)
comune char(3)
filiale char(3)
....
Se voglio estrarre tutti i record (magari aggregati) dalla tabella
figlio *non* devo fare una join ma una semplice where
Inoltre è più facile interpretare i dati grezzi (e per noi non è cosa
da poco)
Terzo, se hai già una chiave (come il caso preso in oggetto) pensi che
aggiungere un campo non faccia cmq levitare la base dati,
sono cmq di solito levitazioni trascurabili, a questo punto val la pena
chiedersi quanto è lungo il campo testuale e quanto spesso viene
modificato (se viene modificato)
E' ovvio che se il campo per quanto univoco è a lunghezza e subisce
molte modifiche usarlo come chiave primaria di una foreign key è poco utile.
Tuttavia sempre a livello concettuale (ma su questo non so se mysql ti
da supporot) tieni primay il campo nome e unque il campo id usando
quest'ultimo come campo padre nelle FK
N.B.
l'implementazione che ho mostrato della tabella padre e figlio *è* in
terza forma normale.
Spero di aver chiarito, mi spiace di non aver risposto prima ma ero
impegnato
ciao
--
Domenico L. icq: 645 44 861
per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]
Maggiori informazioni sulla lista
Db