normaliseren

Status
Niet open voor verdere reacties.

deheugden

Terugkerende gebruiker
Lid geworden
1 mrt 2006
Berichten
1.088
Goedemorgen,

Ik ben al enige tijd op zoek naar een goede uitleg over normaliseren tot de 5e normaalvorm. Wat ik vooral mis, is een duidelijke uitleg m.b.t. de regels. Dus welke data moet ik bij de 1e normaalvorm slitsen, welke bij de 2e, enz. Verder ontbreken vaak goede oefeningen(met antwoord).

Iemand die mij kan helpen?

Dank.
 
Heb je de Access cursus hier al gezien? Zo ja: ook afgekeurd? Want dan weet ik op welk niveau je antwoord wilt :)
 
heb je een linkje voor mij voor wat betreft de acces normalisering? Dan kan ik even kijken
 
Alle Acess afleveringen staan in de Handleiding sectie. Hier staat deel 1.
 
Ik ben begonnen met de handleiding en ik heb eigenlijk wat vragen m.b.t. de 1e NV.

1- met de regel "elk voleldig record is uniek", beodel je dat bijv. in het voorbeeld de maten(36,38,40,enz) niet gezamelijk in een cell mogen staan.
2-kun je een voorbeeld geven van de regel "elk veld een waarde bevat die nite-deelbaar is"en van de regel "geen enkel attribuut wordt herhaald

3- op pagina 4/9 staat dat je de 4 gegevens, artikelnaam,kleur,maar en magazijn als primaire sleutel herleidt. maar waarom deze 4 velden? Stel, we voegen daar prijs aan toe, dan hebben we toch ook een record?

4-daarna, wordt er voor artikel+kleur een aparte code aangemaakt. Dus naast de primaire sleutel, komt er nog een aparte code bij. Waarom maak je deze aparte code en waarom maak je deze van de primaire sleutel?

Dank. wanneer ik dit volledig begrijp, ga ik overstappen naar de 2e NV :-)
 
In Access praten we niet over cellen (da's echt een ander pakket ;) ) maar over velden. Dus dat houden we verder maar aan.
Vraag 1 en 2 zijn eigenlijk hetzelfde onderwerp, dus die pak ik samen. Elke combinatie van gegevens in een tabel (samen een record vormend) moet inderdaad uniek zijn, wil de tabel genormaliseerd heten. Dat betekent dus dat er geen dubbele records in mogen voorkomen. Is ook wel logisch, lijkt mij. Nog afgezien van de vraag waarom je dubbele records zou willen hebben. Elk veld moet daarnaast een unieke waarde bevatten. Dus een combinatie zoals in het voorbeeld, waarbij je meerdere maten in één veld zet, zorgt ervoor dat de inhoud van het veld niet uniek is (immers meerdere maten in één veld) en dat is dus einde oefening qua normalisering. Daarom ben ik ook geen fan van het veldtype waarin je meerdere waarden kan opslaan; daar gaat je normalisatie! Al is dat niet helemaal waar, want Access gebruikt een interne tabel voor velden met multi-waarden. Maar je integriteit, en compatibliteit met andere systemen is gelijk naar de knoppen.

Vraag 3: Een primaire sleutel is de minimale combinatie van velden die een record uniek maken. Elk veld dat je aan die combinatie toevoegt, maakt voor de sleutelfunctie niet uit,maar de sleutel is dan niet meer primair, want je hebt er teveel velden inzitten.
Vraag 4: Een artikel heeft vaak een eigen (unieke) code. Dit werkt niet altijd, omdat je artikelen in een bepaalde kleur, of een bepaalde maat kan krijgen. En dan is het artikel op basis van het artikelnummer niet meer uniek te identificeren. Dan pak je bijvoorbeeld een kleurcode erbij, of een maat. Zolang de combinatie dus maar uniek is.

In je vraag wilde je door naar de 5e normaal. Zou ik niet doen; de meeste databases zijn niet verder genormaliseerd dan de 3e normaalvorm, en dat is meer dan voldoende. Ga je een stap verder, dan wordt je database veel lastiger te bouwen en onderhouden. Uiteraard kun je er nog wel over lezen :).
 
4 en 5 wil ik uiteindelijk toch ook gaan bekijken, zodat ik weet waar ik het over heb. Maar, terugkomend op vraag 2, kun je een voorbeeld geven van het deelbaar zijn wat niet mag? Bestaan er eigenlijk oefeningen(veel) met uikomst voor normaliseren?
 
Het beste voorbeeld heb je zelf al gegeven. In een veld mag je dus nooit 'rood, wit, blauw' zetten als je de kleuren voor een kledingstuk wilt vastleggen. Ik zou daar een subtabel voor maken (tblArtikel_Details) die je koppelt aan de tabel tblArtikel en daarmee is de db weer genormaliseerd. Dit is overigens een voorbeeld van de 2e normaalvorm als ik me niet vergis, want kleur is afhankelijk van artikel.
 
ok, ik heb het even laten liggen en ben nu weer aan het kijken of ik het nog snap.

Maar nu zie ik een verschil in tabel 1,2 en 3

tabel 1 staat na de regel:
Dat klinkt logisch, maar vereist toch enige uitleg. Je kunt bijvoorbeeld een nietgenormaliseerde
tabel Artikelen hebben, met daarin de volgende gegevens:
tabel 2 staat na de regel:
Deze situatie is niet optimaal. Het is beter om voor de kleuren één veld te hebben, zoals in
onderstaand voorbeeld. Hierin is ook een veld gemaakt voor de verschillende Maten waarin
een kledingstuk verkrijgbaar is, want daarvoor geldt hetzelfde probleem als voor de kleuren.

en daar gaat het over. De maten heb je in tabel 1 niet geplaatst. Is daar een reden voor?

verder ben je in De (verkorte) tabel met de waarde gaan rekenen. Deze waarde is voorraad x prijs. Maar waar komt deze vandaan? ook deze is niet eerder voorgekomen.

En dan zit ik nog altijd met de primaire key in mijn maag. Ik kies steeds de verkeerde of te weinig. Kan ik niet gewoon steeds in elke tabel een rij toevoegen met een uniek nummer en dit uniek nummer dan de primaire key maken?

Plus, laatste vraag voor vandaag, de foreign key is de primary key van de 1e tabel welke in de 2e tabel staat? Of zie ik dat verkeerd.
Alvast bedankt voor de reactie.
 
In het voorbeeld ben ik begonnen met alleen een veld [Kleur] om in eerste instantie het probleem dat de tabel heeft als hij niet is genormaliseerd te duiden. Dat probleem is, dat je in Tabel 1 voor elke nieuwe waarde een nieuw veld nodig hebt (Kleur1, Kleur2 etc). Om het verhaal niet onoverzichtelijker dan nodig te maken, heb ik de kledingmaten hier nog even niet in gezet, omdat het plaatje dan onleesbaar zou worden. (artikel is tenslotte geschreven voor de nieuwsbrief, die een beperkte breedte heeft). Op het moment dat ik één veld gebruik voor de kleur, zoals in Tabel2, is er ook ruimte op het scherm voor een extra veld Maten, dus om het probleem van de niet-genormaliseerde tabel beter te laten zien heb ik vanaf tabel2 ook de maten erbij gehaald. En in tabel3 zie je dan het resultaat van de gesplitste records volgens de 1e normaalvorm.

Het veld [Waarde] heb ik er vervolgens bijgehaald om de 2e normaalvorm te demonstreren. Ik had dat ook in de eerste tabellen kunnen zetten, maar omdat het veld verder niets toevoegt aan het verhaal, heb ik dat daar dus weggelaten om meer ruimte op het scherm over te houden voor de velden die er wél toe deden. Dus daarom zie je dat veld ineens verschijnen. Nogmaals: de tabellen zijn slechts bedoeld om de techniek uit te leggen die achter het normaliseren zit, en zijn dus in deze vorm niet echt bruikbaar als tabel. Dat is het eindresultaat uiteraard wel.

Een primaire sleutel mag in beginsel elk veld, of elke combinatie van velden zijn die exact één record uniek maken. Als je Access een tabel laat maken, of je maakt er zelf een zonder sleutelveld op te geven, zal Access voorstellen om een ID veld toe te voegen van het type Autonummering. Dat is op zich prima; zolang het veld geschikt is als sleutelveld, en een Autonummerveld is dat, dan mag je dat best doen. Wél zou ik de naam van het veld een logische omschrijving geven. Dus als je een tabel Artikel maakt, dan zou ik het ID veld hernoemen naar ArtikelID. Want anders wordt je gek van alle ID velden als je queries gaat maken. Want bij welke tabel hoort een veld [ID] dan? Bij [ArtikelID] en [OrderID] weet je precies om welk veld het gaat.
De secundaire sleutel is een veld dat in een gekoppelde tabel verwijst naar de primaire sleutel uit een andere tabel. In een tabel kun je meerdere secundaire sleutels hebben, bijvoorbeeld als je een tabel maakt met Artikelen die door bepaalde leveranciers worden geleverd. Heb je één leverancier per artikel, dan heb je zo'n koppeltabel niet nodig want dan zet je in de tabel Artikel ook een leverancierID maar zijn er meer leveranciers, dan heb je dus een koppeltabel nodig. In dat geval ziet zo'n tabel er dan bijvoorbeeld zo uit:

[table="width: 500, class: grid, align: left"]
[tr]
[td]Art_Lev_ID[/td]
[td]ArtikelID[/td]
[td]LeverancierID[/td]
[td]Prijs[/td]

[/tr]
[tr]
[td]1[/td]
[td]12[/td]
[td]21[/td]
[td]150[/td]
[/tr]
[tr]
[td]2[/td]
[td]12[/td]
[td]52[/td]
[td]135[/td]
[/tr]
[/table]

Je ziet dus het artikelID terugkomen, in combinatie met een LeverancierID. In dit voorbeeld is de combinatie [ArtikelID}+[LeverancierID] uniek, dus dat zou een primaire sleutel kunnen zijn. Of, in dit geval, een extra veld dat als sleutel fungeert.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan