Tabeloverstijgende variabele
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?
Alvast hartelijke dank!
Marc
Gewijzigd op 27/11/2018 22:36:06 door Marc O
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.
Gewijzigd op 28/11/2018 10:01:11 door - Ariën -
- Ariën - op 27/11/2018 23:01:17:
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.
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.
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.
Gewijzigd op 27/11/2018 23:18:42 door Thomas van den Heuvel
https://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html
Druk het af en je hebt een mooie handleiding.
Thomas van den Heuvel op 27/11/2018 23:18:28:
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.
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?
Toevoeging op 27/11/2018 23:43:37:
Adoptive Solution op 27/11/2018 23:40:12:
Begin bij het begin :
https://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html
Druk het af en je hebt een mooie handleiding.
https://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html
Druk het af en je hebt een mooie handleiding.
DANK!
"phpMyAdmin tutorial: Setting up a foreign key constraint"
https://www.youtube.com/watch?v=A42FG4LzdbY