Door
Marc O
op 27-11-2018 22:35
gewijzigd op 27-11-2018 22:36
1.746 views
Hoi,
Ik ben nieuw hier en ook nieuw in het gebruik van php-mysql.
Vandaar ook mijn volgende vraag: Ik heb twee tabellen gemaakt in mysql: 'registratie' (naw-gegevens) en 'onderhoud'. Op het moment dat ik een onderhoudsbeurt via een formulier wil toevoegen aan de database wil ik die koppelen aan een userid uit de registratietabel zodat ik later per userid alle onderhoudswerkzaamheden kan opvragen. Hoe krijg ik dat voor elkaar bij de inrichting van de tabellen?
Beide tabellen moeten overeenkomende gegevens hebben waarmee je ze koppelt.
Een gebruiker heeft na registratie altijd een uniek ID, en diezelfde ID hang je ook aan een onderhouds-record.
Vervolgens kan je met een JOIN in je query beide tabellen koppelen, zodat je bijvoorbeeld bij het ophalen van een onderhouds-record ook alle NAW-gegevens hebt van die persoon.
De relatie leg je dus sowieso vast op de plek waar je met de query de boel ophaalt.
Beide tabellen moeten overeenkomende gegevens hebben waarmee je ze koppelt.
Een gebruiker heeft na registratie altijd een uniek ID, en diezelfde ID hang je ook aan een onderhouds-record.
Vervolgens kan je met een JOIN in je query beide tabellen koppelen, zodat je bijvoorbeeld bij het ophalen van een onderhouds-record ook alle NAW-gegevens hebt van die persoon.
De relatie leg je dus vast op de plek waar je met de query de boel ophaalt.
Dank Ariën. Dus in beide tabellen neem ik een identieke kolom 'userid' op.
Met als verschil dat dit in de user tabel een "primaire sleutel" (primary key) is en in de onderhoudstabel een "verwijzende sleutel" (foreign key).
Als je een echte relationele database wilt opzetten (waarbij er echt een verband is tussen primaire en verwijzende sleutels) dan moet je dit ook tot uiting laten komen in de database engine. Dit is als het ware het type (MySQL) database wat bepaalt wat voor eigenschappen de database heeft (of kan hebben).
Voor relationele databases zou je eigenlijk de InnoDB engine moeten gebruiken. En vervolgens bij creatie van de tabellen de sleutels ook echt koppelen.
De default engine is vaak MyISAM. Deze engine ondersteunt geen foreign keys. Dit heeft tot gevolg dat tabellen letterlijk als los zand aan elkaar hangen. Bij (grote) administratieve systemen is het van groot belang dat alle data onderling blijft kloppen (dit wordt ook wel referentiële integriteit genoemd geloof ik). Ook wil je dat bepaalde wijzigingen in je database als één ondeelbare handeling plaatsvinden. Dit doe je in zogenaamde database transacties. Hiermee kun je batches queries uitvoeren op een zodanige manier dat deze of in het geheel plaatsvinden, of in het geheel niet. Dit draagt uiteraard verder bij aan het kloppend houden van alle data. Je wilt namelijk niet dat zo'n batch halverwege om wat voor reden dan ook crasht en dan maar de helft van alles queries is uitgevoerd. Ook voor database transacties heb je de InnoDB engine nodig.
Oftewel: wil je een echte relationele database --> gebruik de InnoDB database engine.
Met als verschil dat dit in de user tabel een "primaire sleutel" (primary key) is en in de onderhoudstabel een "verwijzende sleutel" (foreign key).
Als je een echte relationele database wilt opzetten (waarbij er echt een verband is tussen primaire en verwijzende sleutels) dan moet je dit ook tot uiting laten komen in de database engine. Dit is als het ware het type (MySQL) database wat bepaalt wat voor eigenschappen de database heeft (of kan hebben).
Voor relationele databases zou je eigenlijk de InnoDB engine moeten gebruiken. En vervolgens bij creatie van de tabellen de sleutels ook echt koppelen.
De default engine is vaak MyISAM. Deze engine ondersteunt geen foreign keys. Dit heeft tot gevolg dat tabellen letterlijk als los zand aan elkaar hangen. Bij (grote) administratieve systemen is het van groot belang dat alle data onderling blijft kloppen (dit wordt ook wel referentiële integriteit genoemd geloof ik). Ook wil je dat bepaalde wijzigingen in je database als één ondeelbare handeling plaatsvinden. Dit doe je in zogenaamde database transacties. Hiermee kun je batches queries uitvoeren op een zodanige manier dat deze of in het geheel plaatsvinden, of in het geheel niet. Dit draagt uiteraard verder bij aan het kloppend houden van alle data. Je wilt namelijk niet dat zo'n batch halverwege om wat voor reden dan ook crasht en dan maar de helft van alles queries is uitgevoerd. Ook voor database transacties heb je de InnoDB engine nodig.
Oftewel: wil je een echte relationele database --> gebruik de InnoDB database engine.
Ik heb het nagekeken maar er wordt een InnoDB-engine gebruikt dus dat zit wel goed. Echter nergens zie ik de optie om er een 'foreign' key van te maken en ook niet hoe ik deze kan koppelen aan de userid in de registratietabel. (zie afbeelding)
Heb je nog tips hiervoor?
[size=xsmall]Toevoeging op 27/11/2018 23:43:37:[/size]