Bij een database ontwerp is één van de belangrijkste vragen: 'welke informatie wil ik er uit kunnen halen?' Voor de één is dat niet hetzelfde als voor een ander. Simpel voorbeeldje: in jouw db heb je in de tabel [ALBUMav] een veld [Kbit/s]. Bij het splitsen van de tabel heeft Access 3 (extra) tabellen aangemaakt, waarvan tabel 2 de velden [Album Artiest] en [Tabel4_ID] gebruik maken van tabellen 3 en 4. In de laatste tabel vind je de [Kbit/s] terug. Tabel 2 lijkt de plaattitel + artiest dus te combineren met de [Kbit/s]. Dat líjkt logisch, en voor een zelftaper is het dat waarschijnlijk ook. Als ik een cd rip (mp3 of Flac bijvoorbeeld) dan doe ik dat met één rip instelling. Alle numnmers krijgen dus dezelfde [Kbit/s]. Ergo: voor mij is het voldoende om de [Kbit/s] op
Albumniveau vast te leggen.
Aan de andere kant heb je mensen die alle nummers van een album bij elkaar grissen door ze te downloaden. Dan loop je de kans dat de nummers op verschillende manieren zijn geript. In dát geval is het belangrijk om de [Kbit/s] op
nummerniveau vast te leggen.
Nog een voorbeeldje: het veld [Genre]. Je kunt een plaat kopen van één artiest, en dan zal je die hoogstwaarschijnlijk aan één genre hangen. Voer je een verzamelalbum in, dan kan het heel goed zijn dat je bij alle nummers apart een genre wilt toevoegen. Ik heb verzamelplaten genoeg waar Blues, Chanson, Singer/Songwriter en Hard rock gezellig bij elkaar staan op één plaat. Kortom: er gaan verschillende wegen naar Rotterdam
.
Het is maar, wil ik hier mee zeggen, op welk niveau je de informatie
nodig hebt. Als je het proces van
normaliseren bekijkt (en dat ligt ten grondslag aan
alle goede databases) dan ga je binnen een tabel kijken naar de gegevens
groepen binnen een tabel. Daarbij kijk je vooral naar
herhalende gegevens, want dat is een ijzersterke indicatie dat er wat verkeerd zit in een tabel. Kijken we bijvoorbeeld naar de eerste 3 nummers van jouw tabel, dan valt al gelijk wat op:
HTML:
Id Artiest Titel Track Album Artiest Album Tijd Jaar Genre MB Kbit/s
1 B.B. King Payin' The Cost To Be The Boss 1 VA Blues & The City 00:06:13 2009 Blues 14,3 CBR 320
2 Muddy Waters Goin' Home 2 VA Blues & The City 00:02:33 2009 Blues 5,9 CBR 320
3 Howlin' Wolf Highway 49 3 VA Blues & The City 00:03:05 2009 Blues 7,11 CBR 320
Om te beginnen: er zijn twee soorten albums: albums van één artiest, en verzamelalbums. Jij hebt een verzamelalbum aangeleverd, en dat levert voor de
Artiest dus een probleem op, want je hebt er verschillende. Daar zul je dus iets mee moeten. In dit geval leg je de artiest dan bij het nummer vast, wat echter bij een plaat van één artiest herhalende
gegevens zou opleveren. Dus daar zou je het weer níet willen. Ik heb hierboven al uitgelegd dat je ook verschillen kan hebben in genres op een verzamelalbum.
Daarnaast heb je nog het 'probleem' dat een uitgave uit meerdere schijven kan bestaan; met al die luxe uitgaven van tegenwoordig komt dat best vaak voor. Hoe ga je dat vastleggen? Je kunt dat oplossen door een subtabel AlbumDisc te gebruiken, die je aan de tabel Albums hangt bijvoorbeeld, maar je kunt ook een volgnummer in de tabel Albums zetten. Het ene is niet automatisch beter als het andere. Ook hier geldt weer: tot op welk niveau wil je differentiatie kunnen aanbrengen? Stel dat ik een mooie uitgave heb (Beatles, Witte album bijvoorbeeld) met een stuk of wat schijven. Dan kan ik ze in één tabel zetten met een volgnummer, maar dan houdt het wel een beetje op. Gebruik ik een extra tabel, dan kan ik voor elke tabel een eigen genre kiezen. Of Type (heb je nog niet). Het White Album bestaat bijvoorbeeld uit een originele versie, een opgekrikte versie, en een versie met demo's van de liedjes. Gebruik ik een aparte tabel, dan kan ik dat keurig specificeren op
albumniveau. Heb ik maar één tabel, dan kan ik dat ook wel doen, maar dan moet ik dat
per nummer gaan vastleggen. En dat vind ik dus niet handig. Maar als jij die informatie niet handig/nutteloos/overbodig vind, dan ga je dat waarschijnlijk niet eens invoeren, dus dan hoef je je daar ook niet druk over te maken!
Wat ik dus bedoel te zeggen is: je moet jezelf
van te voren de vraag stellen: 'Wat wil ik uit de database kunnen opvragen?' Is dat een lijst met alle demo liedjes die je hebt? Dan moet je die informatie opslaan. Wil je weten op welke nummers Eric Clapton allemaal heeft meegespeeld? Wil je weten wie er
op het moment van uitbrengen van een plaat allemaal in de band zaten? Dan moet je die informatie opslaan. En dat wordt dan weer een extra tabel (die je dus ook moet invullen
).
Bepaal dus
welke informatie je wilt kunnen terugvinden; dat bepaalt grotendeels hoe je tabellen er uit gaan zien.