Hoe kan ik nou in phpmyadmin de relatie tussen die 3 tabellen leggen? Ik snap het concept wel van relationele databases, maar ik kan nergens uitleg vinden hoe ik nou die relatie kan leggen. Immers, een taak is een onderdeel van een order (sterker nog, een order kan meerdere taken bevatten), en een order is een onderdeel van een klant (maar een klant kan ook meerdere orders bevatten). De primary keys heb in respectievelijk gezet op 'klantID' in de tabel klanten, 'orderID' in de tabel orders en 'taakID' in de tabel taken. En nu?
Graag een duidelijke uitleg en geen korte antwoorden met linkjes naar websites over relationele databases en FNF, SNF, TNF, enz.
Kan je dan even uitleggen wat de bedoeling is?
Want met "En nu?", zijn we niet veel.
* Orders van een klant weergeven?
mysql_query("SELECT orderID from tbl_orders WHERE klantID = "1"")
* Taken van een order tonen?
mysql_query("SELECT taakID from tbl_taken WHERE orderID = "1"")
Nou ik wil dus weten hoe ik meerdere orders aan 1 klantID koppel. Dus als ik een form heb waar ik dus een nieuwe order wil aanmaken moet ik eerst selecteren bij welke klant deze order hoort (uiteindelijk dus een report waar ik bijv. alle orders van díe klant wil zien). Ik kan dan wel een tabel klant aanmaken en een tabel orders, maar ik snap dus niet hoe ik de onderlinge relatie leg. Moet ik dan een extra tabel aanmaken per klant bijvoorbeeld?
In de sql-query's die jij net typt ga je er al vanuit dat die tabellen er zijn, maar hoe weet mysql nou dat een bepaald ordernummer bij een bepaald klantID hoort?
Nee, databases, tabellen en velden zijn nooit afhandelijk van aantallen. Ze moeten zo gemaakt zijn dat bij grote aantallen dat de structuur niet hoeft te worden aangepast.
Dit principe heet Databasenormalisatie. Verdiep er maar eens in.
Het beste is om een tabel aan te maken waarin je per record een koppeling legt tussen KlantID en OrderID. Met JOINS in je applicatie kan je de juiste data met elkaar verbinden.
Ok. Dus het verbinden/de relatie leggen gebeurd dus niet in MySQL maar in PHP. Dus als ik de databasestructuur opzet en alle tabellen en velden aanmaak dan is de basis dus goed. Ik hoef dus niet meer te doen in de database zelf dan een primary key instellen op bijv. orderid ? De rest regel ik dus in PHP?
Je kan ook kijken naar CASCADE in MySQL, daarmee kan je records voor zover ik weet op de datalaag gekoppeld verwijderen bij een DELETE, maar daar heb ik nog nooit naar gekeken.
Als je je Engine op "InnoDB" zet , kan je relaties leggen.
bv. KlantID en OrderID:
Bij het deleten van het record van een user, zullen dan automatisch alle records van klantenorders waar die KlantID voorkomt ook verwijderd worden.
Ook bij het aanpassen.
Stel, je gebruikt als id van een user een string (ja ja, dat mag; een id hoeft niet numeriek te zijn). bv. Jan Kees => id = jan_kees
In je orders heb je dan een veld waar jan_kees staat in een aantal records.
Wel, wanneer je die id aanpast, zullen ook alle velden in de orders aangepast worden naar die nieuwe waarde