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 Customermoże być powiązany z wieloma Orderplikami.
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 Orders 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 Customeri Order. Na przykład, jeśli klient ma kolumny idi name:
id,name
1,Bill Smith
2,Jim Kenshaw
Następnie, aby a Orderbyło skojarzone z a Customer, wiele implementacji SQL dodaje do Ordertabeli kolumnę, która przechowuje idskojarzone 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_idkolumnę 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 Customerma dodatkowych kolumn opisujących relację z Order. W rzeczywistości Customermoże mieć również związek jeden-do-wielu z nich ShippingAddressi SalesCallstoły, a jednocześnie nie mają dodatkowe kolumny dodane do Customertabeli.
Jednak aby opisać relację wiele do jednego, często iddo tabeli „wiele” dodawana jest kolumna, która jest kluczem obcym do tabeli „jedna” - w tym przypadku customer_idkolumna jest dodawana do tabeli Order. Do powiązanego zamówienia nr 10 dla 12,34 USD Bill Smithprzypisujemy customer_idkolumnę do Bill Smithidentyfikatora 1.
Możliwe jest jednak również istnienie innej tabeli opisującej relację Customeri Order, dzięki czemu do Ordertabeli nie trzeba dodawać żadnych dodatkowych pól . Zamiast dodawać customer_idpole do Ordertabeli, może istnieć Customer_Ordertabela zawierająca klucze zarówno dla, jak Customeri 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.