Яка реальна різниця між відносинами «один до багатьох» та «багато хто до одного»?
Між цими термінами існують концептуальні відмінності, які повинні допомогти вам візуалізувати дані, а також можливі відмінності в створеній схемі, які слід повністю зрозуміти. В основному різниця одна з перспектив.
У співвідношенні " один до багатьох " локальна таблиця має один рядок, який може бути пов'язаний з багатьма рядками в іншій таблиці. У прикладі з SQL для початківців , хтось Customerможе бути пов'язаний з багатьма Orders.
У протилежному співвідношенні « багато в один» місцева таблиця може мати багато рядків, пов’язаних з одним рядком в іншій таблиці. У нашому прикладі багато Orders можуть бути пов'язані з одним 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_idBill Smith
Тим НЕ менше, це також можливо, там буде ще одна таблиця , яка описує Customerі Orderвідносини, так що ніякі додаткові поля не повинні бути додані в Orderтаблицю. Замість додавання customer_idполя до Orderтаблиці може бути Customer_Orderтаблиця, яка містить ключі і для, Customerі Order.
customer_id,order_id
1,10
1,11
2,12
У цьому випадку один-багато - багато-багато-хто поняття « - це концептуальна концепція, оскільки між ними не існує змін схеми. Який механізм залежить від вашої схеми та реалізації SQL.
Сподіваюся, це допомагає.