Jaka jest prawdziwa różnica między relacją jeden do wielu i wiele do jednego?
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 wieloma Order
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 jednym Customer
. 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
i Order
. Na przykład, jeśli klient ma kolumny id
i name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Następnie, aby a Order
było skojarzone z a Customer
, wiele implementacji SQL dodaje do Order
tabeli kolumnę, która przechowuje id
skojarzone Customer
(w tym schemacie customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
W powyższych wierszach danych, jeśli spojrzymy na customer_id
kolumnę id, zobaczymy, że Bill 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ę z Order
. W rzeczywistości Customer
może mieć również związek jeden-do-wielu z nich ShippingAddress
i SalesCall
stoły, a jednocześnie nie mają dodatkowe kolumny dodane do Customer
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 przypadku customer_id
kolumna jest dodawana do tabeli Order
. Do powiązanego zamówienia nr 10 dla 12,34 USD Bill Smith
przypisujemy customer_id
kolumnę do Bill Smith
identyfikatora 1.
Możliwe jest jednak również istnienie innej tabeli opisującej relację Customer
i Order
, dzięki czemu do Order
tabeli nie trzeba dodawać żadnych dodatkowych pól . Zamiast dodawać customer_id
pole do Order
tabeli, może istnieć Customer_Order
tabela zawierająca klucze zarówno dla, jak Customer
i Order
.
customer_id,order_id
1,10
1,11
2,12
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.