Hey,

Ik vind het nu stilaan tijd om mijn eigen klantensysteem te maken. Ik zit momenteel nog in de beginfase. Ik ben aan het uitdenken hoe ik alles ga laten werken. Ik was nu bezig aan mijn db model en dacht om dit zo te doen.

Een tabel gebruikers met gebruikersnaam, wachtwoord, etc..
Een tabel opdrachten: afgewerkte opdrachten met info erover. Elke gebruiker ziet dan een lijst met opdrachten die ik voor hen gedaan heb.
Een tabel lopende opdrachten: klanten zien dan aan welke opdrachten ik bezig ben voor hen.

In de admin zou ik dan bijvoorbeeld lopende opdrachten verplaatsen naar afgewerkte opdrachten enzo.

Ik denk wel dat dit een goeie aanpak is, maar ik had ook graag eens geweten hoe jullie dit zouden maken.
Nee, je bent wel een van de weinigen die meteen met een database zichzelf zo in het diepe gooit.
Ik denk dat ik stilaan begin te verstaan hoe jullie willen hoe ik het doe. Ik ga ff een voorbeeldje geven en zeggen jullie dan maar of het juist is :P

software
-----------
id
pid
naam

status
--------
id
pid
naam
datetime

Dan voor een opdracht de status opvragen adhv het pid. Als ik het goed heb kan ik dan meerdere statussen per item hebben en dan krijg je een overzicht met tijd erbij (zoals iemand hier al gezegd heeft). Voor de software kan ik dan ook alle programma's ophalen adhv het id van het item.

Kom ik een beetje in de buurt of ben ik op de juiste weg??
Ja alleen het zal uiteindelijk veel uitgebreider worden. Bedenk het volgende:
Als je data dubbel opslaat (muv id's) is je DB nog niet uitgenormaliseerd.

Klaasjan
Ok, ben blij dat je de draad hebt opgepakt!

Dan de vragen: Wat is 'pid' in de tabel 'software' ? In deze tabel staan alleen de softwarepakketten die jij gebruikt. Er is in deze tabel geen enkel verband met enig ander gegeven/tabel.

Dezelfde vraag voor 'status', wat doet 'pid' in deze tabel? En 'datetime' wat doet deze daarin? In deze tabel komt bv. 1x de waarde 'testen' te staan, en dat is het wel. Andere tabellen zijn echter aan deze tabel gekoppeld, en daarin kun je een datumtijdstempel van een status opgeven. Dat kan onmogelijk in de tabel 'status'. Deze tabel wordt uitsluitend gebruikt om een waarde te selecteren.

Maar, wanneer je gaat normaliseren, is het 'verboden' om in tabellen te denken. Dat gaat helemaal fout! Normaliseren doe je door op papier de diverse soorten data te onderkennen, niet door in tabellen te gaan denken.

Pas wanneer je helemaal klaar bent met normaliseren, ga je kijken hoe de tabellen eruit komen te zien. En zover ben je nog lang niet.
@klaasjan boven
Euh, ik ben al blij dat je zegt dat ik in de goeie richting ga, maar dat is ook het enige wat ik uit je post snap. Wat bedoel je precies?

@pgfrank
pid = pairid, de status moet toch gelinkt worden aan het item?
Wat ik bedoel? Gooi het idee van tabellen weg en ga eerst normaliseren.

Het heeft geen enkele zin om stap 20 uit te voeren wanneer je stap 1 t/m 19 nog niet hebt gedaan, laat staan begrijpt wat daar wordt gedaan. Je loopt hééél ver voor de muziek uit en daar ga je spijt van krijgen.

Stop dus met denken in tabellen, begin met denken in de soorten data die in jouw systeem voorkomen.

klantnaam, userid, status, softwarepakket, dat zijn de soorten data waar we het over hebben. Met normaliseren ga je al dit soort gegevens benoemen en de onderlinge verbanden aanleggen.

@pgfrank
pid = pairid, de status moet toch gelinkt worden aan het item?
Klopt, maar dat kan onmogelijk in de tabel 'status' gebeuren. Dat kun je dus ook niet in deze tabel opslaan.
Dit komt allemaal voor in het systeem:

type werk
prijs
status
software
opmerkingen
datum wanneer een nieuwe status is toegepast
datum wanneer het project gestart is
userid
gebruikersnaam
wachtwoord
ipadres
sleutel

Denk dat dit is wat ik zoal nodig heb. Nu moet dit in tabellen gezet worden?
Nu moet dit in tabellen gezet worden?
Nee, dat ga je normaliseren.

Print die tutorial eens uit en ga stap voor stap de verschillende onderdelen uitwerken. Het is nog lang geen tijd om de tabellen aan te gaan maken! Ga er voor zitten, normaliseren is niet eenvoudig maar wel een onmisbare basis.

Heb niet de illusie dat je dit in een paar uur/dagen doorhebt, daar echt wel meer tijd overheen.

Edit: Ik kan even geen goede vergelijking vinden, maar met een beetje beeldspraak...

Jij wilt je vrienden verrassen met een zelfgemaakte taart en jij hebt nog nooit een taart gebakken. Jij begint nu de gebaksschoteltjes, de vorkjes en een groot mes en vraagt mij hoe je de taart moet snijden. Welke taart?

Je hebt nauwelijks een idee wat voor een taart jij wilt gaan bakken, hebt de ingredienten niet in huis, weet niet hoe de oven werkt, laat staan waar de bakvorm ligt en of hoe de mixer werkt... Pak het recept er bij, zoek alle ingredienten bij elkaar en ga 1 voor 1 de boel verwerken. Wanneer je daarmee klaar bent en de boel keurig hebt gebakken, dan wordt het pas tijd voor het betere snijwerk. Zo ook met jouw database en zijn tabelletjes.

Eerst bakken en daarna pas snijden!
Nuja, die vergelijking is wel wat overdreven :P Ik heb toch wel al meerdere succesvolle aplicaties gemaakt. Maar ik ga er wel wat moeite voor doen op het goed te leren doen. Ik ga dat dan s uitprinten en alle stappen 1 voor 1 uitvoeren. Nu ga ik het ff hierbij laten want ik ben hier nu al veel te lang mee bezig :)

Reageren