willy55 ha scritto:
Approfondisci le tre forme normali, in particolare per l'attributo IDEntità della Tabella "ScalettaDischi".
Mi sono riletto le definizioni delle 3 forme normali e non sto ancora capendo quello che hai voluto dire.
Non ho visto violazioni della 1NF e della 2NF. Per quanto riguarda la 3NF non sono sicuro di aver capito fino in fondo cosa serva per evitare che vi siano violazioni a questa regola.
A questo punto, però, quello che mi confonde è perché consideri una violazione di una delle forme normali l'IDEntità su ScalettaDischi mentre non consideri nello stesso modo l'IDEntità sulla tabella Dischi.
A questo punto provo a dare alcuni esempi per far capire perché ho inserito quel tipo di logica.
Esempi:
Gli Album che devo inserire sono:
1) Alchemy Live dei Dire Straits
2) 01010001 degli Ayreon
3) L'album omonimo dei Winter Rose
4) Se Io avessi previsto tutto di Francesco Guccini
parlando solo del discorso FK verso tabella Entità e FK verso tabella titoli quello che si ha è:
L'edizione che ho nella mia collezione di "Alchemy Live" e l'edizione standard in 2 CD in confezione jewelcase
Ciascuno dei due CD è un disco che fa parte di quella particolare edizione dell'album
Ciascuno dei due CD ha una propria scaletta composta da più canzoni.
Ogni canzone ha un proprio titolo
In questo caso
Album.IDEntità = Disco.IDEntità = ScalettaDisco.IDEntità
Album.IDTitolo = Disco.IDTitolo e Disco.IDTitolo <> ScalettaDisco.IDTitolo
L'edizione di "01011001" degli Ayreon che ho è quella limitata in formato cofanetto con confezione digipack composta da 2 CD + 1 DVD dove
Ciascuno dei due CD ha un proprio titolo, diverso dal titolo dell'Album (il CD 1 si intitola "Y", il CD 2 si intitola "Earth") mentre il DVD ha lo stesso titolo dell'album di riferimento, mentre tutti hanno lo stesso artista dell'album di riferimento
Sia i 2 CD che il DVD hanno ciascuno una propria scaletta ciascun elemento della quale ha il medesimo Artista dell'album di riferimento
In questo caso
Album.IDEntità = Disco.IDEntità = ScalettaDisco.IDEntità
Album.IDTitolo <> DiscoID.Titolo [per i 2 CD] e Album.IDTitolo = DiscoIDTitolo [per il DVD] Album.IDTitolo <> ScalettaDisco.IDTitolo e
Disco.IDTitolo <> ScalettaDisco.IDTitolo
L'edizione dell'Album dei Winter Rose che ho è la ristampa in 2 CD in confezione jewelcase dove
il CD 1 è l'album dei Winter Rose
il CD 2 è un EP composto da 6 canzoni ciascuna delle quali di un artista differente, quindi una compilation in cui l'Artista del Disco è impostato
ad "[Artisti Vari]"
in questo caso:
per CD 1
Album.IDEntità = Disco.IDEntità = ScalettaDisco.IDEntità
Album.IDTitolo = Disco.IDTitolo e Disco.IDTitolo <> ScalettaDisco.IDTitolo
per CD 2
Album.IDEntità <> Disco.IDEntità, Album.IDEntità <> ScalettaDisco.IDEntità e Disco.IDEntità <> ScalettaDisco.IDEntità
Album.IDTitolo <> Disco.IDTitolo, Album.IDTitolo <> ScalettaDisco.IDTitolo e Disco.IDTitolo <> ScalettaDisco.IDTitolo
L'Edizione di "Se io avessi previsto tutto questo" è quella limitata in formato cofanetto da 10 CD, dove
i primi 5 CD hanno come proprio Titolo "Studio"
il 6° CD ha come proprio Titolo "Live Acustico"
i CD dal 7 al 9 hanno come proprio titolo "Live"
il 10° CD ha come proprio titolo "Collaborazioni e Rarità"
I primi 9 CD sono tutti associati solo a Francesco Guccini come Artista
il 10° CD ha due tipi di canzoni: le rarità (che sono pezzi di nuovo associati al solo Francesco Guccini) e le Collaborazioni (che sono pezzi di Guccini interpretati da altri artisti, in cui Guccini figura solo come artista ospite)
per cui, in questo caso, la situazione è:
per tutti e 10 i CD
Album.IDTitolo <> Disco.IDTitolo, Album.IDTitolo <> ScalettaDisco.IDTitolo e Disco.IDTitolo <> ScalettaDisco.IDTitolo
per i primi 9 CD
Album.IDEntità = Disco.IDEntità = ScalettaDisco.IDEntità
per il 10° CD
Album.IDEntità <> Disco.IDEntità (valore [Artisti Vari]), Album.IDEntità <> ScalettaDisco.IDEntità per ogni canzone appartenente al gruppo delle "Collaborazioni" e Album.IDEntità = ScalettaDisco.IDEntità per ogni canzone appartenente al gruppo delle rarità,
Disco.IDEntità <> ScalettaDisco.IDEntità
Quindi, se io non inserisco rimandi alle tabelle “Entità” e “Titoli” sia nella tabella “Album”, che nella tabella “Dischi” che nella tabella “ScalettaDisco”, ci sono dei casi in cui io perdo dei dati relativi all’edizione dell’album che ho nella mia collezione.
A questo punto chiedo: dov’è l’errore di logica? E, nel caso, qual è la soluzione alternativa per rientrare nella normalizzazione corretta dei dati?