Veel op Veel relatie vraagje
Ik heb een vraagje m.b.t. veel op veel relaties in een database.
Ik ben op dit moment bezig om in symfony een database model te genereren. Ik zie dat er bij meer op meer relaties de volgende opties zijn:
- Many to many unidirectional
- Many to many Bidirectional
- Many to many, Self-referencing
Het probleem is dat ik niet goed de verschillen hiertussen begrijp. Op de pagin zelf wordt het niet beschreven en ik heb al een tijdje op google zitten zoeken maar kan niet echt een duidelijke uitleg hiervan vinden. Kan iemand mij misschien makkelijk het verschil tussen deze 3 beschrijven zodat ik weet wat ik eventueel zou moeten gebruiken?
Alvast bedankt.
bidirectional > 2 richtingsverkeer. Dus tabel A pakt uit B, en B uit A.
selfreferencing > zelf-refererend. Dus tabel A vul je met gegevens uit tabel A. Vaak via een INNER-join.
refereren kan altijd wel maar A vul je met gegevens uit tabel A mogelijk niet. Dit resulteert mogelijk in een foutmelding die "mutating table error" heet dus dat gaat niet of slechts beperkt goed.
Gewijzigd op 24/02/2015 14:44:38 door Aad B
bron
Ik denk dat, zelfs als je definities van deze types hebt, je toch een zeker gevoel moet ontwikkelen welke opzet je hanteert. Of je zou het gedrag als leidraad kunnen gebruiken.
Bedankt!
Vorige keer hadden we geloof ik boeken en auteurs als voorbeeld genomen:
Unidirectional:
Code (php)
Bidirectional:
Code (php)
Als je nu kijkt naar de Unidirectional dan zie je dat als je een entity Book hebt dat je dus tevens de bijbehorende auteurs hebt. Je kunt dus van Book naar Auteur. Maar heb je nu een entity Author dan weet je dus mooi niet welke boeken deze heeft geschreven. Je kunt dus niet van Auteur naar Boek.
Bij Bidirectional kun je heel simpel kiezen: Of je pakt een entity Book of je pakt een entity Author en dan kun je van beiden naar de ander.
De laatste is dus in principe handiger. Echter kan het in sommige situaties ook onnodig zijn. Bijvoorbeeld als je Nooit van een Entity Author hoeft te weten welke boeken daarbij zitten.
------------------------------------------------------------------------------------------------------
Bij Self referencing heeft het allemaal betrekking op één en dezelfde tabel.
Bijvoorbeeld gebruikers en hun vrienden:
Nu wil je weten wie vriend van wie is en maak je hiervoor een koppeltabel
Stel user 1 is vrienden met user 4, 5 en 6
Stel user 2 is vrienden met user 1 en 3
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
vrienden
-------------------
user_id | vriend_id
-------------------
1 | 4
1 | 5
1 | 6
2 | 1
2 | 3
-------------------
user_id | vriend_id
-------------------
1 | 4
1 | 5
1 | 6
2 | 1
2 | 3
Gewijzigd op 24/02/2015 15:21:52 door Frank Nietbelangrijk
Heb inmiddels een aantal voorbeelden werkend gekregen waar ik mee verder kan.