Mysql
 sql >> Database >  >> RDS >> Mysql

Esistono pratiche/linee guida per la creazione di tabelle non normalizzate durante il processo di normalizzazione?

TL;DR Devi seguire un algoritmo pubblicato per scomporlo in una determinata forma normale.

PS Non hai ottenuto Artist dal CD originale tramite la normalizzazione, poiché hai introdotto una nuova colonna. Ma supponiamo che la tabella Artist abbia il significato ovvio. Perché pensi che "di nuovo non sia nella terza forma normale per quanto ho capito"? Se artista -> anno nel CD originale, lo fa anche in Artista. Ma poi {artist} è, con {artist_id}, un CK (candidate key) di Artist, e Artist è in 3NF (e 5NF).

Dalla versione originale della tua domanda più quella attuale, hai una tabella di base proposta su CD con colonne cd_id, titolo, gruppo e anno, con tuple dove cd cd_id intitolato titolo è stato creato dal gruppo gruppo che si è formato nell'anno anno . La colonna cd_id è unica, quindi è un CK. FD {gruppo} -> vale anche l'anno.

La normalizzazione non introduce nuovi nomi di colonna. Sostituisce una tabella di base proposta con altre, ciascuna con un sottoinsieme più piccolo delle sue colonne, che si uniscono sempre a quello che sarebbe stato il suo valore. La normalizzazione fino a BCNF si basa su FD (dipendenze funzionali), che sono anche ciò che determina i CK di una tabella di base. Quindi la tua domanda non contiene una scomposizione. Una possibile scomposizione che ricorda la tua domanda, che potrebbe avere o meno proprietà particolari, sarebbe quella di tabelle con insiemi di colonne {cd_id, title, group} e {group, year}.

Altri FD tengono nell'originale. Alcuni tengono a causa di quali sono le colonne; alcuni tengono a causa del CK; alcuni tengono perché {gruppo} -> l'anno tiene; in generale, alcuni reggono perché tutti e tre lo fanno. E forse altri tengono a causa di quali tuple dovrebbero entrare nella relazione e quali situazioni possono sorgere. Devi decidere per ogni possibile FD se regge.

Certo, potresti essere stato detto che gli unici che reggono sono quelli che devono reggere in quelle circostanze. Ma tu non mi è stato detto che l'unico FD valido è {group} -> year, perché ci sono FD banali e ogni superset di un CK determina funzionalmente ogni insieme di colonne .

Una definizione di 3NF è che una relazione è in 2NF e nessuna colonna non primaria dipende funzionalmente in modo transitivo da qualsiasi CK. (Nota che ogni condizione implica altre definizioni.) Se vuoi usarlo per scoprire se la tua relazione è in 3NF, allora devi scoprire cosa tutti i CK lo sono. Puoi farlo più velocemente tramite un algoritmo appropriato, ma puoi semplicemente vedere quali insiemi di colonne determinano funzionalmente ogni colonna ma non ne contengono un insieme più piccolo, poiché quelli sono i CK. Quindi controlla le due condizioni nella definizione.

Se vuoi normalizzare a 3NF, devi seguire un algoritmo per la scomposizione in 3NF. Non spieghi quale processo pensi di dover seguire. Ma se non stai seguendo un algoritmo collaudato, qualsiasi componente tu scelga potrebbe o non potrebbe sempre unirsi all'originale e potrebbe o non potrebbe essere ciascuno in una particolare forma normale superiore. Nota che esempi di scomposizioni hai visto non sono presentazioni di algoritmi di scomposizione .

Le definizioni NF (forma normale) forniscono condizioni che una relazione deve soddisfare per essere in quella NF. Non ti dicono come scomporre senza perdite (conservando FD quando possibile) alle relazioni in NF più alte. Le persone hanno elaborato algoritmi per produrre scomposizioni in particolari NF. (E la decomposizione in un dato NF in generale non implica la prima decomposizione in NF inferiori. Passare attraverso NF inferiori può effettivamente impedire che vengano generate buone decomposizioni di NF superiori dell'originale quando si arriva alla decomposizione per un NF più alto.)

Potresti anche non renderti conto che quando alcuni FD reggono, altri devono tenere. Quest'ultimo può essere determinato tramite gli assiomi di Armstrong dal primo. Quindi, solo perché ti sei decomposto per sbarazzarti di un particolare FD la cui presenza viola un particolare NF non significa che non c'erano un sacco di altri che lo hanno violato con cui non hai avuto a che fare. Possono essere presenti nei nuovi componenti. Oppure possono non essere presenti in modi problematici, così che non li hai "conservati" quando avresti potuto, portando a progetti scadenti.

Scopri gli algoritmi NF specifici e, in tal caso, le NF e la normalizzazione stessa, in un libro di testo/corso/presentazione di college/università. Molti sono online.