В чем разница между отношениями «один ко многим» и «многие к одному»?
Между этими терминами существуют концептуальные различия, которые должны помочь вам визуализировать данные, а также возможные различия в сгенерированной схеме, которые следует полностью понять. В основном разница заключается в перспективе.
В отношении « один ко многим» в локальной таблице есть одна строка, которая может быть связана со многими строками в другой таблице. В примере из SQL для начинающих один Customerможет быть связан со многими Orders.
В противоположном отношении « многие к одному» в локальной таблице может быть много строк, связанных с одной строкой в другой таблице. В нашем примере Orderс одним может быть связано множество s Customer. Это концептуальное различие важно для ментального представления.
Кроме того, схема , которая поддерживает отношения могут быть представлены по- разному в Customerи Orderтаблицах. Например, если у клиента есть столбцы idи name:
id,name
1,Bill Smith
2,Jim Kenshaw
Затем, чтобы a 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(customer-id # 1) имеет 2 связанных с ним заказа: один на 12,34 доллара и один на 7,58 доллара. Jim Kenshaw(customer-id # 2) имеет только 1 заказ на 158,01 доллара.
Важно понимать, что обычно отношение «один ко многим» на самом деле не добавляет никаких столбцов в таблицу, которая является «единицей». Не Customerимеет дополнительных столбцов, описывающих связь с Order. На самом деле , Customerвозможно , также имеет отношение один-ко-многим с ShippingAddressи SalesCallтаблицами и еще не имеют никаких дополнительных столбцов добавлены в Customerтаблицу.
Однако для описания отношения «многие к одному» часто к idтаблице «многие» добавляется столбец, который является внешним ключом для таблицы «один» - в этом случае customer_idстолбец добавляется в таблицу Order. Связанному заказу №10 на сумму 12,34 доллара США Bill Smithмы назначаем customer_idстолбец Bill Smithс идентификатором 1.
Тем не менее, это также возможно, там будет еще одна таблица , которая описывает Customerи Orderотношения, так что никакие дополнительные поля не должны быть добавлены в Orderтаблицу. Вместо добавления customer_idполя в Orderтаблицу может быть Customer_Orderтаблица, содержащая ключи как для, так Customerи для Order.
customer_id,order_id
1,10
1,11
2,12
В этом случае схемы « один ко многим» и « многие к одному» являются концептуальными, поскольку между ними нет изменений схемы. Какой механизм зависит от вашей схемы и реализации SQL.
Надеюсь это поможет.