Versio

normaliseren

Overzicht Reageren

Reshadd farid
Redacteur

reshadd farid

03/02/2012 15:03:17
Quote Anchor link
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!
 
PHP hulp

PHP hulp

25/05/2012 12:17:41
Gesponsorde koppelingen:
 
Wouter J

Wouter J

03/02/2012 15:05:17
Quote Anchor link
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.
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 15:07:46
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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
Gewijzigd op 03/02/2012 15:43:16 door reshadd farid
 
Merijn Venema

Merijn Venema

03/02/2012 16:19:55
Quote Anchor link
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.
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 16:23:59
Quote Anchor link
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
Gewijzigd op 03/02/2012 16:26:13 door reshadd farid
 
Merijn Venema

Merijn Venema

03/02/2012 16:39:17
Quote Anchor link
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
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 16:42:33
Quote Anchor link
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!
 
Merijn Venema

Merijn Venema

03/02/2012 16:49:34
Quote Anchor link
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
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 17:02:51
Quote Anchor link
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 ;)
 
Ger van Steenderen

Ger van Steenderen

03/02/2012 19:19:54
Quote Anchor link
Je moet eerst inventariseren dan normaliseren, het lijkt me sterk dat je een db hebt met 2 tabellen met ieder 3 velden.
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 19:35:13
Quote Anchor link
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
Gewijzigd op 03/02/2012 19:36:05 door reshadd farid
 
Erwin H

Erwin H

03/02/2012 19:41:44
Quote Anchor link
Merijn Venema op 03/02/2012 16:39:17:

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.
 
Reshadd farid
Redacteur

reshadd farid

03/02/2012 19:50:30
Quote Anchor link
nee er kunnen niet meerdere gebruikers dezelfde ticket hebben, wel kunnen gebruikers meerdere tickets hebben. is dat een probleem?
 
Erwin H

Erwin H

03/02/2012 19:54:39
Quote Anchor link
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).
 
Merijn Venema

Merijn Venema

03/02/2012 20:07:58
Quote Anchor link
@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.
 



Overzicht Reageren

Get Adobe Flash player