Яка реальна різниця між відносинами «один до багатьох» та «багато хто до одного»?
Між цими термінами існують концептуальні відмінності, які повинні допомогти вам візуалізувати дані, а також можливі відмінності в створеній схемі, які слід повністю зрозуміти. В основному різниця одна з перспектив.
У співвідношенні " один до багатьох " локальна таблиця має один рядок, який може бути пов'язаний з багатьма рядками в іншій таблиці. У прикладі з SQL для початківців , хтось Customer
може бути пов'язаний з багатьма Order
s.
У протилежному співвідношенні « багато в один» місцева таблиця може мати багато рядків, пов’язаних з одним рядком в іншій таблиці. У нашому прикладі багато Order
s можуть бути пов'язані з одним Customer
. Ця концептуальна різниця важлива для розумового уявлення.
Крім того, схема, яка підтримує взаємозв'язок, може бути представлена по-різному в таблицях Customer
та Order
. Наприклад, якщо у замовника є стовпці id
та name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Тоді для Order
асоціації з a Customer
, багато реалізацій SQL додають у Order
таблицю стовпець, в якому зберігаються id
пов’язані Customer
(у цій схемі customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
У наведених вище рядках даних, якщо ми подивимось на customer_id
стовпчик id, ми побачимо, що Bill Smith
(ID клієнта №1) з ним пов'язано 2 замовлення: одне за 12,34 долара та одне за 7,58 долара. Jim Kenshaw
(ідентифікатор клієнта №2) має лише 1 замовлення на $ 158,01
Важливо усвідомити, що, як правило, відносини «один до багатьох» насправді не додають стовпців до таблиці, яка є «єдиною». У Customer
стовпці немає додаткових стовпців, які описують відносини з Order
. Насправді , Customer
можливо , також має відношення один-ко-многим з ShippingAddress
і SalesCall
таблицями і ще не мають ніяких додаткових стовпців додані в Customer
таблицю.
Однак, щоб описати відносини "багато в одному", часто до id
таблиці "багато" додається стовпець, який є зовнішнім ключем до таблиці "один" - у цьому випадку customer_id
стовпчик додається до Order
. Для асоційованого замовлення №10 за 12,34 доларів США до стовпця Bill Smith
ми призначаємо id 1.customer_id
Bill Smith
Тим НЕ менше, це також можливо, там буде ще одна таблиця , яка описує Customer
і Order
відносини, так що ніякі додаткові поля не повинні бути додані в Order
таблицю. Замість додавання customer_id
поля до Order
таблиці може бути Customer_Order
таблиця, яка містить ключі і для, Customer
і Order
.
customer_id,order_id
1,10
1,11
2,12
У цьому випадку один-багато - багато-багато-хто поняття « - це концептуальна концепція, оскільки між ними не існує змін схеми. Який механізм залежить від вашої схеми та реалізації SQL.
Сподіваюся, це допомагає.