Het is al even geleden dat ik écht na moest denken over relaties binnen een (MySQL) database en was benieuwd wat nu de best practice is omtrend koppeltabellen en de verschillende relaties. Ik was al eens aan de slag gegaan in de MySQL Workbench, maar kwam erachter dat ik bepaalde dingen toch uit het oog verloren was. Na wat Googelen kwam ik niet aan de gewenste informatie, dus toch hier maar eens vragen.
Situatie
Het gebruik van een koppeltabel en (iets minder) foreign keys is mij bekend, maar hoe (en of) ik die hier moet toepassen vraag ik me af.
Tabel: user.
- id
- name
Tabel: building. Een user kan meerdere gebouwen bezitten.
- id
- user_id
- name
Tabel: building_log. Bij een building kunnen meerdere log entries horen.
- id
- building_id
- event
... of
Tabel: user.
- id
- name
Tabel: user_has_building. Koppeltabel
- user_id
- building_id
Tabel: building. Een user kan meerdere gebouwen bezitten.
- id
- name
Tabel: building_has_log. Bij een building kunnen meerdere log entries horen.
- building_id
- log_id
Tabel: log. Bij een building kunnen meerdere log entries horen.
- id
- event
---
Goed, een log zou je ook in een non-relationele database kunnen gooien en zo zijn er wel meerdere optimalisaties te verzinnen voor bovenstaand voorbeeld. Het gaat me er meer om; wanneer een koppeltabel en wanneer niet. Bij 1:m relaties hoeft het niet; zie eerste voorbeeld, maar bij n:m relaties kun je niet anders. Toch zie ik ook vaak gezegd worden dat het niet goed is om (bijv.) user_id in de tabel building te hebben.
En waar komt de foreign key in het verhaaltje voor, alleen bij situatie 2 of ook bij het eerste voorbeeld.
Situatie
Het gebruik van een koppeltabel en (iets minder) foreign keys is mij bekend, maar hoe (en of) ik die hier moet toepassen vraag ik me af.
Tabel: user.
- id
- name
Tabel: building. Een user kan meerdere gebouwen bezitten.
- id
- user_id
- name
Tabel: building_log. Bij een building kunnen meerdere log entries horen.
- id
- building_id
- event
... of
Tabel: user.
- id
- name
Tabel: user_has_building. Koppeltabel
- user_id
- building_id
Tabel: building. Een user kan meerdere gebouwen bezitten.
- id
- name
Tabel: building_has_log. Bij een building kunnen meerdere log entries horen.
- building_id
- log_id
Tabel: log. Bij een building kunnen meerdere log entries horen.
- id
- event
---
Goed, een log zou je ook in een non-relationele database kunnen gooien en zo zijn er wel meerdere optimalisaties te verzinnen voor bovenstaand voorbeeld. Het gaat me er meer om; wanneer een koppeltabel en wanneer niet. Bij 1:m relaties hoeft het niet; zie eerste voorbeeld, maar bij n:m relaties kun je niet anders. Toch zie ik ook vaak gezegd worden dat het niet goed is om (bijv.) user_id in de tabel building te hebben.
En waar komt de foreign key in het verhaaltje voor, alleen bij situatie 2 of ook bij het eerste voorbeeld.