Relacje jedno i dwu kierunkowe.

0

Dzień dobry. Chciałem zapytać, kiedy stosować relacje jedno a kiedy dwukierunkową? Definicja jest znana, ale nie do końca pojmowana.
Dajmy na to, że mamy koszyk, chcemy w nim przechowywac idusera i idproduktu, który ten user ma w koszyku (dla czepialskich - koszyk dostępny po autoryzacji, dla userów niezalogowanych, koszyk tworzony jest w sesjach).
Referencja do encji Basket, leci z encji User, tak samo z encji Item do encji Basket. Ale czy basket powinien posiadać referencję do obydwu tych encji? Nie lepiej tutaj zastosować encję jednokierunkową, zarówno z encji User jak i Item?

PS: nie pogardzę ciekawymi artykułami na ten temat, bo wydaje się być bardzo ciekawy i wart zagłębienia. Przy okazji, gdyby ktoś był w posadaniu materiałów na temat Doctrine (oprócz dokumencacji), także nie pogardzę.

Pozdrawiam.

0

Nie wiem jak to jest w syphony ale w laravelu ja dodaje relacje gdy potrzebuje w kodzie jej użyć więc to dalsze części kodu definiują czy ta relacja zostanie utworzona w kodzie czy nie.

2

This has to do with whether common usage (within the application domain) would attempt to access both sides of the relationship from the other side... Invoices to products would probably be unidirectional, as athough we often want to know what products are on an invoice, it is unlikely that you would want to know all the invoices that contain a given product.

Stores to products on the other hand is bi-directional, as we could easily want to access both all the products at a specific store, or find all the stores that sell a specific product.

Difference between unidirectional and bidirectional relational relationship

Czyli nie masz się co tym przejmować. Z tego co wiem SQL w obydwu przypadkach jest taki sam. Dodawaj relacje tam, gdzie ich potrzebujesz.

Jeżeli masz faktury i produkty, to zazwyczaj tylko faktury, czyli jakaś tam encja Invoice, musi wiedzieć, że posiada ona produkty. Raczej nie pobierasz z encji Product wszystkich faktur, na których jest (albo Twojej aplikacji po prostu to nie obchodzi) :P W tym wypadku mamy do czynienia z relacją jednokierunkową.

Jeżeli Twoja aplikacja to jakiś system zarządzania uczelnią, to możesz mieć relację dwukierunkową relację przedmiot - uczniowie. W tym wypadku obchodzi Cie za równo jacy uczniowie uczęszczają na dany przedmiot i na jakie przedmioty uczęszcza dany uczeń (relacja dwukierunkowa).

Także jeszcze raz powtórzę (jeżeli sie nie myle) to nie ma większego znaczenia, ale rozsądnie jest dodawać relacje w miarę potrzeb (czyli nie tworzyć za każdym razem relacji dwukierunkowych).

1 użytkowników online, w tym zalogowanych: 0, gości: 1