Jaka jest prawdziwa różnica między relacją jeden do wielu i wiele do jednego? To jest tylko odwrócone, jakby?
Nie mogę znaleźć żadnego `` dobrego i łatwego do zrozumienia '' samouczka na ten temat innego niż ten: SQL dla początkujących: Część 3 - Relacje w bazie danych
Odpowiedzi:
Tak, to na odwrót. To zależy od tego, po której stronie relacji znajduje się jednostka.
Na przykład, jeśli jeden dział może zatrudniać kilku pracowników, wtedy dział do pracownika to relacja jeden do wielu (1 dział zatrudnia wielu pracowników), podczas gdy relacja między pracownikami to wiele do jednego (wielu pracowników pracuje w jednym dziale).
Więcej informacji o typach relacji:
Relacje z bazą danych - dokumentacja IBM DB2
źródło
Z tej strony o terminologii baz danych
źródło
Istnieją koncepcyjne różnice między tymi terminami, które powinny pomóc w wizualizacji danych, a także możliwe różnice w wygenerowanym schemacie, które należy w pełni zrozumieć. Głównie różnica polega jednak na perspektywie.
W relacji jeden do wielu lokalna tabela ma jeden wiersz, który może być powiązany z wieloma wierszami w innej tabeli. W przykładzie z SQL dla początkujących jeden
Customer
może być powiązany z wielomaOrder
plikami.W odwrotnej relacji wiele do jednego tabela lokalna może mieć wiele wierszy powiązanych z jednym wierszem w innej tabeli. W naszym przykładzie wiele
Order
s może być skojarzonych z jednymCustomer
. Ta różnica pojęciowa jest ważna dla reprezentacji umysłowej.Ponadto schemat obsługujący relację może być różnie reprezentowany w tabelach
Customer
iOrder
. Na przykład, jeśli klient ma kolumnyid
iname
:Następnie, aby a
Order
było skojarzone z aCustomer
, wiele implementacji SQL dodaje doOrder
tabeli kolumnę, która przechowujeid
skojarzoneCustomer
(w tym schemaciecustomer_id
:W powyższych wierszach danych, jeśli spojrzymy na
customer_id
kolumnę id, zobaczymy, żeBill Smith
(identyfikator klienta nr 1) ma 2 powiązane z nim zamówienia: jedno za 12,34 USD i jedno za 7,58 USD.Jim Kenshaw
(identyfikator klienta nr 2) ma tylko 1 zamówienie za 158,01 USD.Ważne jest, aby zdać sobie sprawę, że zazwyczaj relacja jeden do wielu w rzeczywistości nie dodaje żadnych kolumn do tabeli, która jest „jedynką”. Nie
Customer
ma dodatkowych kolumn opisujących relację zOrder
. W rzeczywistościCustomer
może mieć również związek jeden-do-wielu z nichShippingAddress
iSalesCall
stoły, a jednocześnie nie mają dodatkowe kolumny dodane doCustomer
tabeli.Jednak aby opisać relację wiele do jednego, często
id
do tabeli „wiele” dodawana jest kolumna, która jest kluczem obcym do tabeli „jedna” - w tym przypadkucustomer_id
kolumna jest dodawana do tabeliOrder
. Do powiązanego zamówienia nr 10 dla 12,34 USDBill Smith
przypisujemycustomer_id
kolumnę doBill Smith
identyfikatora 1.Możliwe jest jednak również istnienie innej tabeli opisującej relację
Customer
iOrder
, dzięki czemu doOrder
tabeli nie trzeba dodawać żadnych dodatkowych pól . Zamiast dodawaćcustomer_id
pole doOrder
tabeli, może istniećCustomer_Order
tabela zawierająca klucze zarówno dla, jakCustomer
iOrder
.W tym przypadku operacje jeden do wielu i wiele do jednego są koncepcyjne, ponieważ nie ma między nimi zmian schematu. Który mechanizm zależy od Twojego schematu i implementacji SQL.
Mam nadzieję że to pomoże.
źródło
javax.persistence.OneToMany
inaczej niż wManyToOne
. Mówisz, że są synonimami, czy po prostu zależy to od implementacji? Czy moja odpowiedź jest nieprawidłowa?Nie ma różnicy. To tylko kwestia języka i preferencji, w jaki sposób określisz związek.
źródło
Odpowiedź na pierwsze pytanie brzmi: oba są podobne,
Odpowiedź na twoje drugie pytanie brzmi: jeden do wielu -> MĘŻCZYZNA (stół MĘŻCZYZNA) może mieć więcej niż jedną żonę (stół KOBIETA) wiele do jednej -> więcej niż jedna kobieta poślubiła jednego MĘŻCZYZNĘ.
Teraz, jeśli chcesz powiązać tę relację z dwiema tabelami MAN i WOMEN, jeden wiersz tabeli MAN może mieć wiele relacji z wierszami w tabeli WOMEN. mam nadzieję, że to jasne.
źródło
Przykład
Dwie tabele z jedną relacją
SQL
W SQL istnieje tylko jeden rodzaj relacji, nazywany referencją. (Twój interfejs użytkownika może być pomocny lub dezorientujący [na przykład w niektórych Odpowiedziach], ale to już inna historia).
Referencje
na klucz podstawowy w innej tabeli (The referenc ed tabela)
W języku SQL, Bar odwołuje się do Foo, a
nie na odwrót
Ponieważ
Foo.Foo
jest to klucz podstawowy, jest unikalny, istnieje tylko jeden wiersz dla dowolnej wartościFoo
Bar.Foo
jest to odniesienie, klucz obcy i nie ma na nim unikalnego indeksu, może istnieć wiele wierszy dla dowolnej wartościFoo
Foo::Bar
jest jeden do wieluBar::Foo
jest wiele do jednegoBar
wierszu jest tylko jedenFoo
wiersz, do którego się on odnosiJest tylko jedna relacja, dlatego nie ma różnicy. Postrzeganie (z jednego „końca” lub drugiego „końca”) lub czytanie go od tyłu nie zmienia relacji.
Kardynalność
Kardynalność jest deklarowana najpierw w modelu danych, czyli logicznym i fizycznym (intencja), a następnie w implementacji (zamiar zrealizowany).
Kardynalność
Jeden do zera do wielu
W SQL to (powyższe) jest wszystkim, czego potrzeba.
Jeden do jednego do wielu
Aby wymusić transakcję z tabeli referencyjnej, potrzebna jest transakcja .
Jeden do zera do jednego
Potrzebujesz
Bar
:Jeden do jednego
Potrzebujesz transakcji, aby wymusić tę z tabeli referencyjnej.
Wiele do wielu
Na poziomie fizycznym nie ma czegoś takiego (przypomnijmy sobie, w SQL jest tylko jeden typ relacji).
Na wczesnych poziomach logicznych podczas ćwiczenia modelowania wygodnie jest narysować taką relację. Zanim model zbliży się do wdrożenia, lepiej będzie, gdy zacznie używać tylko rzeczy, które mogą istnieć. Taka relacja jest rozwiązywana poprzez implementację tabeli asocjacyjnej.
Wiele do wielu rozwiązanych
źródło
Jeden do wielu i wiele do jednego są podobne pod względem różnorodności, ale nie aspektu (tj. Kierunkowości).
Mapowanie asocjacji między klasami jednostek i relacji między tabelami. Istnieją dwie kategorie relacji:
źródło
Nie ma praktycznej różnicy. Po prostu użyj relacji, która jest najbardziej sensowna, biorąc pod uwagę sposób, w jaki postrzegasz swój problem, jak zilustrował Devendra.
źródło
--- Wiele do jednego --- Te troje dzieci może mieć samotnych rodziców.
Obie są podobne. To może być wykorzystane należy do potrzeby. Jeśli chcesz znaleźć dzieci dla określonych rodziców, możesz wybrać opcję Jeden do wielu. albo chcesz znaleźć rodziców dla bliźniaków, możesz iść z wieloma do jednego. Również....,
źródło
jeden do wielu ma klasę nadrzędną zawierającą n liczby potomków, więc jest to mapowanie kolekcji.
wiele do jednego ma n liczba elementów potomnych zawiera jednego rodzica, więc jest to mapowanie obiektów
źródło