DrFrankenstoner schreef op 21 September 2003 @ 14:27:
[...]
Als je hebt opgelet op school, dan had je ook de ERD methode geleerd en bijna rechtstreeks ontdekt dat de relatiediagrammen (goh hoe zouden ze toch aan die naam komen

) die in access gemaakt worden, ontworpen worden volgens de ERD methode.
Ik wil niet gaan flamen, maar de NIAM methode is een geweldige theoretische ontwerp methode die je op een aantal opleidingen leert (vaak in combinatie met het geweldige student-tool FCO-IM). Zou er dan daadwerkelijk een reden zijn dat er bijna geen bedrijven zijn die NIAM als ontwerpmethode kiezen
zie je wel dat sarcasme kan druipen 
Dat betekend nog niet dat ze aan de ERD methode vast blijven houden. Tenminste, als je het over dezelfde ERD hebt als ik. (b.v:
http://www.smartdraw.com/...xamples/software/erd3.htm) Kan dat ook in Access??? Volgens mij zijn er hier dus 2 ERD's. Database schema in Access en het informatiemodel.
Het klopt dat veel bedrijven (en studenten

) niet voor NIAM kiezen. Er zitten namelijk voordelen en nadelen aan, waarbij 1 heel belangrijk nadeel is dat het tijdrovend is. Voordeel is dat het meer houwvast biedt wat vooral voor de beginneling erg handig is, maar ook voor de beste paarden die weleens willen struikelen

. 'k ga NIAM hier niet lopen verdedigen, iedereen moet natuurlijk zelf weten waar hij/zij voor kiest.
Je leert al gauw dat joins op strings performance technisch gezien niet acceptabel zijn (een integer is in C gewoon sneller en de core van een RDBMS is over het algemeen in C geschreven), daarom wordt er dus gejoined op ID's en niet op logische sleutels. Ook zal je ontdekken dat het gewoon veel meer tijd kost om een werkend ontwerp te maken m.b.v. de NIAM methode t.o.v. de ERD methode.
Of het acceptabel is hang natuurlijk van de requirements af. Is performance belangrijk, dan kunnen id's gebruikt worden. Is onderhoudbaarheid belangrijk, dan kan er gekozen worden voor de strings als primary keys.
De illusie dat er een "perfect" ontwerp bestaat voor iedere situatie zal je op een gegeven moment kwijt raken. Er zijn meer wegen naar Rome. (en als je dan echt eerlijk bent, dan zie je dat je in het door jou geproduceerde IGD een aantal uniciteit constraints mist

)
idd

zo.. dat is er uit, genoeg geouwehoer dus over wat wel of niet de "ware" database ontwerp methode is. Die discussie hoort (1) niet in dit topic thuis en (2) is net zo zinloos als een "welke scripttaal is beter php of asp" discussie.
Het lijkt me wel goed om de topicstarter enige informatie te geven over welke methoden er zijn + voordelen en nadelen en wat de voordelen en nadelen van b.v. id's zijn. De discussie over het genoemde ontwerp wordt hier op een iets abstracter niveau gevoerd, zodat het wat bruikbaarder en interessanter wordt voor ander lezers. Laten we er geen battle van maken, maar het alleen hebben over voor- en nadelen.
edit:
nog maar wat toevoegingkjes
ik mag dan wel geen TU papiertje hebben in Informatica of Systeemanalyse, ik heb wel een HBO papiertje in systeemanalyse met als hoofdrichting databases en daarnaast nog een aantal certificaten van de Fachhochschule Hannover m.b.t. systeemanalyse. Ik denk dus dat ik best snap hoe je een database moet ontwerpen. (Ik verdien mijn brood al een drietal jaren o.a. als database ontwerper). Misschien dat ik mijn mond moet houden als een TU docent of student spreekt, ik heb immers geen TU papiertje, maar ik denk dat ik toch echt wel als "man van de praktijk" mag spreken.
Als student Informatica van Saxion hogeschool Enschede spreek ik hier dus met een expert. Het zijn de argumenten die tellen, niet de naam, reputatie, papiertjes, enz...
Dat Oracle "strings' omzet naar integers en daar dus mee gaat joinen is waar, maar denk je dat dat omzetten geen CPU kost? (en dus tijd, precies de reden waarom je dus een integer kies?) Een processor die je bitchslapped omdat je een alfanumerieke primaire sleutelattribuut vervangt voor een numerieke (integer) primair sleutelattribuut in combinatie met een unieke sleutel op het alfanumerieke attribuut, kan gewoon simpel weg geen argument buiten redundantie om gebruiken. Het correcte tegenargument is performance. Zeker een samengestelde primaire sleutel (in een andere situatie dan een koppeltabel) moet ten aller tijde vervangen worden door een (1) numerieke primarie sleutelattribuut (wederom i.c.m. een unieke sleutel op de samengestelde sleutel) Ditmaal met als tweetal redenen, namelijk redundantie (1) en performance (2).
Bij een samengestelde primaire sleutel heb je me nu overtuigd. Het is inderdaad sneller en je hebt geen redundantie. Maar, stel als je dan dit schema ontwerpt:
Orders(ID,.....,fk_klantadres->KlantAdressen.ID)
KlantAdressen(ID,klantnaam*,addres*,....)
En nu is er een tabel met klanten die orders mogen plaatsen.
VertrouwdeKlanten(KLANTNAAM,...)
Hoe leg je dan de constraint op de database die ervoor zorgt dat er alleen orders zijn van die klanten? (Van alle klanten, ook die niet mogen bestellen, zijn er addressen aanwezig)
Dit kan gedaan worden door met een join, de klantnaam van de order te achterhalen en te kijken of deze in de tabel VertrouwdeKlanten voorkomt. Het zou sneller gaan als deze tabelstructuur ontworpen was:
Orders(ID,.....,fk_klant->KlantAdressen.KLANT,fk_adres->KlantAdressen.ADDRES)
KlantAdressen(KLANT,ADDRES,....)
Kortom: De oplossing met een id is wel sneller en niet redundant, maar bij uitbreidingen komen we in de problemen. Dus weer een kwestie van prioriteiten. Mijn ervaring is dat bij bedrijfssoftware waar de performance meestal minder belangrijk is, de laatste een goede oplossing is. De topicstarter zal zelf moeten afwegen wat hij belangrijker vindt. En misschien vind hij id's wel handiger omdat hij gewend is om zo te werken. Maar probeer wel de voordelen en nadelen te zien en meer over de ontwerpkeuzes na te denken om tot een beter ontwerp te komen.
Owja, de constraint had ook gewoon een opvraag kunnen zijn