Veel op Veel relatie vraagje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ama saril

ama saril

24/02/2015 14:19:42
Quote Anchor link
Hallo php mensen,
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.
 
PHP hulp

PHP hulp

22/12/2024 07:02:24
 
Eddy E

Eddy E

24/02/2015 14:35:50
Quote Anchor link
unidirectional > 1 richtingsverkeer. Dus van tabel A wordt er alleen uit tabel B gepakt. B pakt niet uit A
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.
 
Aad B

Aad B

24/02/2015 14:41:22
Quote Anchor link
--> 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
 
Thomas van den Heuvel

Thomas van den Heuvel

24/02/2015 14:53:18
Quote Anchor link
Misschien kun je een zeker gedrag afleiden uit de SQL-code van de ondertstaande documentatie die gegenereerd wordt aan de hand van het relatietype?

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.
 
Ama saril

ama saril

24/02/2015 14:57:00
Quote Anchor link
Bedankt allemaal in ieder geval. Ik denk dat ik het nu wel begrijp. Ga even de voorbeelen uit de link proberen en ik denk dat ik er nu wel uit komt.

Bedankt!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/02/2015 15:16:56
Quote Anchor link
In symfony heb je de entities.

Vorige keer hadden we geloof ik boeken en auteurs als voorbeeld genomen:

Unidirectional:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

class Book {
    private $authors;

    function
__construct() {
        $this->authors = new ArrayCollection();
    }
}


class Author {
    // ...
}

?>


Bidirectional:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

class Book {
    private $authors;

    function
__construct() {
        $this->authors = new ArrayCollection();
    }
}


class Author {
    private $books;

    function
__construct() {
        $this->books = new ArrayCollection();
    }
}


?>


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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
users
- id
- naam
- geb. datum


Nu wil je weten wie vriend van wie is en maak je hiervoor een koppeltabel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
vrienden
-user_id
-vriend_id ( is ook gewoon een user_id)


Stel user 1 is vrienden met user 4, 5 en 6
Stel user 2 is vrienden met user 1 en 3
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
vrienden
-------------------
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
 
Ama saril

ama saril

25/02/2015 09:54:24
Quote Anchor link
Bedankt Frank,
Heb inmiddels een aantal voorbeelden werkend gekregen waar ik mee verder kan.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.