normaliseren
dames en heren, ik heb hier heel vaak hulp gehad op het forum maar heel vaak bleek dat mijn db niet goed genormaliseerd was, en met een paar omweggetjes lukte het dan toch wat ik wilde maar nu moet ik een nieuw project doen en daar weer een website voor bouwen en nu wil ik graag de database goed op orde hebben,
mijn vraag is kan iemand mij helpen met het normaliseren van de database?
misschien een goede uitleg geven waar ik op letten moet?
ik heb hier ergens volgens mij daar een tut van gezien maar daar werd ik niet wijzer van.
bedankt alvast!
mijn vraag is kan iemand mij helpen met het normaliseren van de database?
misschien een goede uitleg geven waar ik op letten moet?
ik heb hier ergens volgens mij daar een tut van gezien maar daar werd ik niet wijzer van.
bedankt alvast!
Gesponsorde koppelingen:
Dit is de beste uitleg: http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/
Veel beter kunnen we het niet geven. Probeer heel rustig eens na te denken.
Probeer anders eerst eens de nulde normaalvorm uit. Dat is de simpelste die er is en daar schrijf je alles op wat je in de db wilt opslaan. Daarna wil ik je wel verder helpen om met dat voorbeeld de andere 3 normaalvormen uit te voeren.
Veel beter kunnen we het niet geven. Probeer heel rustig eens na te denken.
Probeer anders eerst eens de nulde normaalvorm uit. Dat is de simpelste die er is en daar schrijf je alles op wat je in de db wilt opslaan. Daarna wil ik je wel verder helpen om met dat voorbeeld de andere 3 normaalvormen uit te voeren.
ik zal even kijken wouter :) bedankt!
Toevoeging op 03/02/2012 15:42:34:
Inventarisatie
Ticketnummer
Naam
Email
Wachtwoord
Bericht
dit is ong wat ik heb:
Toevoeging op 03/02/2012 15:42:34:
Inventarisatie
Ticketnummer
Naam
Wachtwoord
Bericht
dit is ong wat ik heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Inventarisatie
Ticketnummer ( RG)
ticketDatum x
Naam
Email ( sleutel )
Wachtwoord
Bericht x ( optioneel )
0ste vorm
GEGEVENS
email(sleutel)
Naam
Wachtwoord
TICKETGEGEVENS
email (sleutel)
Ticketnummer
1ste vorm
GEGEVENS
email(sleutel)
Naam
Wachtwoord
TICKETGEGEVENS
email (sleutel)
ticketSleutel??
Ticketnummer
Ticketnummer ( RG)
ticketDatum x
Naam
Email ( sleutel )
Wachtwoord
Bericht x ( optioneel )
0ste vorm
GEGEVENS
email(sleutel)
Naam
Wachtwoord
TICKETGEGEVENS
email (sleutel)
Ticketnummer
1ste vorm
GEGEVENS
email(sleutel)
Naam
Wachtwoord
TICKETGEGEVENS
email (sleutel)
ticketSleutel??
Ticketnummer
Gewijzigd op 03/02/2012 15:43:16 door reshadd farid
Waar zijn de 2e en 3e vorm? Daarnaast zou ik email niet als sleutel hanteren, een email kan gewijzigd worden waardoor relaties die eerder gelegd zijn niet meer gelinkt zijn ( is corruptie en overhead) dus daar moet je nog op verder. TicketNummer/sleutel is al beter.
ja maar ehm kan ik dan niet nog beter een zelfgemaakte sleutel invoegen? want ticketnummer dat komt toch niet voor bij de GEGEVENS tabel?
en de 2de en 3de vorm daar kom ik niet uit, ik heb dit gehad op school maar nooit wat van gesnapt dus vandaar dat ik om hulp vroeg
en de 2de en 3de vorm daar kom ik niet uit, ik heb dit gehad op school maar nooit wat van gesnapt dus vandaar dat ik om hulp vroeg
Gewijzigd op 03/02/2012 16:26:13 door reshadd farid
IC, even kijken hoor, een zelfgemaakte sleutel hoeft niet perse, als iets uniek is dan kan dat fungeren als de sleutel. Het is alleen wel handiger om een ID als primary key te gaan gebruiken. Email zou ik niet doen. Maar op dit moment is het sowieso nog niet goed denk ik want nu heb je nog n-n relaties. Immers, meerdere gebruikers kunnen meerdere tickets aanvragen. Snap je dit? Relaties in databases is eigenlijk best interessant namelijk.
Je hebt meerdere soorten relaties maar even kort door de bocht:
1-1
1-N
N-1
N-N
1-1 is overbodig, dan kan er gecombineerd worden,
1-N / N-1 is hetzelfde, maar dit is wat je wil. 1 op N relaties
N-N is wat je niet wil, dan heb je geen relationele database ( soms kan het helaas niet anders )
Wat je nu wil is GEGEVENS een uniek ID geven welke niet gelijk is aan email ( die kan veranderen => corrupte database, overhead )
Wat je nu wil is een ticket nummer een uniek ID geven welke gekoppeld (!) kan worden aan een gebruiker ID. Maar omdat we dan N-N relaties krijgen moeten we dit nog een keer afsplitsen ( 3e vorm ).
Dan krijg je dus:
GEBRUIKER
gebruiker_ID
email
naam
wachtwoord
TICKETS
ticket_ID
ticketSleutel
Ticketnummer
GEBRUIKER_TICKETS
gebruiker_ID
ticket_ID
Je hebt meerdere soorten relaties maar even kort door de bocht:
1-1
1-N
N-1
N-N
1-1 is overbodig, dan kan er gecombineerd worden,
1-N / N-1 is hetzelfde, maar dit is wat je wil. 1 op N relaties
N-N is wat je niet wil, dan heb je geen relationele database ( soms kan het helaas niet anders )
Wat je nu wil is GEGEVENS een uniek ID geven welke niet gelijk is aan email ( die kan veranderen => corrupte database, overhead )
Wat je nu wil is een ticket nummer een uniek ID geven welke gekoppeld (!) kan worden aan een gebruiker ID. Maar omdat we dan N-N relaties krijgen moeten we dit nog een keer afsplitsen ( 3e vorm ).
Dan krijg je dus:
GEBRUIKER
gebruiker_ID
naam
wachtwoord
TICKETS
ticket_ID
ticketSleutel
Ticketnummer
GEBRUIKER_TICKETS
gebruiker_ID
ticket_ID
dus in principe moet zo mijn db ong eruitzien? ticketSleutel daar bedoelde ik ticket_ID mee idd dus dat is dubbelop
ik snap het nu beter dankjewel voor de duidelijke uitleg!
ik snap het nu beter dankjewel voor de duidelijke uitleg!
Oke, als het dubbel op is kun je die weghalen inderdaad. Waar ik zelf voorstander van ben is om alle primary keys een soortgelijke naam te geven. Vaak is dat altijd ID maar om duidelijk te maken wat wat is heb ik het hier gberuiker_ID en ticket_ID genoemd.
Maar het gaat er om dat je N-N relaties wil voorkomen. Die tutorial die Wouter heeft gepost staat ook veel interessante data in, om bijvoorbeeld een webwinkel achtig idee op te zetten. Daar heb je vrij veel N-N relaties op een gegeven moment en dan wordt het koppelen interessant. Als je een keer tijd hebt zou ik die tut eens door nemen. Daar staat ook in wat ik hier boven even heb geschetst.
Het komt er simpelweg op neer dat je entiteiten gaat omschrijven. Een gebruiker, wat is uniek voor een gebruiker? naam, wachtwoord etc , dan is dat 1 entiteit. Dan heb je de tickets, dat is ook een entiteit, heeft een nummer, content, een response, een update. Oftewel, samengevoeg ook een entiteit.
Entiteiten wil je gaan koppelen ( anders zou je geen RMDB gebruiken ) dus moet je er voor zorgen dat entiteiten gekoppeld kunnen worden. Daar zijn de ID`s voor en die moeten vervolgens geen N-N relaties krijgen. Als je dat hebt, moet je ze gaan koppelen door een koppeltabel zodat je 1-N en N-1 relaties krijgt.
Succes ermee
Maar het gaat er om dat je N-N relaties wil voorkomen. Die tutorial die Wouter heeft gepost staat ook veel interessante data in, om bijvoorbeeld een webwinkel achtig idee op te zetten. Daar heb je vrij veel N-N relaties op een gegeven moment en dan wordt het koppelen interessant. Als je een keer tijd hebt zou ik die tut eens door nemen. Daar staat ook in wat ik hier boven even heb geschetst.
Het komt er simpelweg op neer dat je entiteiten gaat omschrijven. Een gebruiker, wat is uniek voor een gebruiker? naam, wachtwoord etc , dan is dat 1 entiteit. Dan heb je de tickets, dat is ook een entiteit, heeft een nummer, content, een response, een update. Oftewel, samengevoeg ook een entiteit.
Entiteiten wil je gaan koppelen ( anders zou je geen RMDB gebruiken ) dus moet je er voor zorgen dat entiteiten gekoppeld kunnen worden. Daar zijn de ID`s voor en die moeten vervolgens geen N-N relaties krijgen. Als je dat hebt, moet je ze gaan koppelen door een koppeltabel zodat je 1-N en N-1 relaties krijgt.
Succes ermee
dankjewel ik heb de tut doorgenomen inderdaad ik snap het heel vaag maar ik denk dat ik hier voorlopig wel een klein beetje verder mee kan komen :) en anders post ik hier mijn problemen weer ;)
Je moet eerst inventariseren dan normaliseren, het lijkt me sterk dat je een db hebt met 2 tabellen met ieder 3 velden.
ik maak iets kleins, het enige wat hoeft te gebeuren is registreren, een ticket kunnen openen en deze kunnen bekijken,
en de admin ( ik dus ) moet op de geopende ticket antwoord kunnen geven, een soort helpdesk dus.. moet ik meerdere dingen in de DB hebben denk je? ik heb het een en ander al toegevoegd maar misschien heb ik iets over het hoofd gezien
en de admin ( ik dus ) moet op de geopende ticket antwoord kunnen geven, een soort helpdesk dus.. moet ik meerdere dingen in de DB hebben denk je? ik heb het een en ander al toegevoegd maar misschien heb ik iets over het hoofd gezien
Gewijzigd op 03/02/2012 19:36:05 door reshadd farid
Merijn Venema op 03/02/2012 16:39:17:
GEBRUIKER_TICKETS
gebruiker_ID
ticket_ID
GEBRUIKER_TICKETS
gebruiker_ID
ticket_ID
Deze tabel heb je volgens mij niet nodig. Tenminste, als elk ticket altijd aan maar een gebruiker hangt. In dat geval kan je namelijk de gebruiker_ID opnemen in het ticket zelf.
Kunnen meerdere gebruikers aan hetzelfde ticket hangen dan heb je al een N-N relatie.
nee er kunnen niet meerdere gebruikers dezelfde ticket hebben, wel kunnen gebruikers meerdere tickets hebben. is dat een probleem?
Dat laatste is waarom je apart een gebruikers tabel nodig hebt en een ticket tabel. Maar een link tabel tussen die twee is alleen nodig als er meerdere gebruikers aan meerdere tickets kunnen hangen. In dat geval heb je namelijk een N-N relatie.
Inmiddels zag ik wel dat Merijn dat ook opmerkte in zijn post, alleen zie ik dus niet dat het ook een N-N relatie is (wat jij nu bevestigt).
Inmiddels zag ik wel dat Merijn dat ook opmerkte in zijn post, alleen zie ik dus niet dat het ook een N-N relatie is (wat jij nu bevestigt).
@Erwin, je hebt gelijk, ik zie inderdaad ook de N-N niet meer, ik denk dat mijn fantasie weer eens op de loop is gegaan. Eenmaal in m`n zwarte hoekje wil ik nog wel eens dingen doen die soms nergens op slaan.
@Reshadd, kijk vooral even naar Erwin z`n verhaal, hij heeft namelijk gelijk. Een ticket heeft hier maar 1 gebruiker, als dat het geval is hoef je alleen gebruiker_ID op te slaan in je TICKETS tabel. Scheelt extra data.
@Reshadd, kijk vooral even naar Erwin z`n verhaal, hij heeft namelijk gelijk. Een ticket heeft hier maar 1 gebruiker, als dat het geval is hoef je alleen gebruiker_ID op te slaan in je TICKETS tabel. Scheelt extra data.



