В чем разница между отношениями «один ко многим» и «многие к одному»?
Между этими терминами существуют концептуальные различия, которые должны помочь вам визуализировать данные, а также возможные различия в сгенерированной схеме, которые следует полностью понять. В основном разница заключается в перспективе.
В отношении « один ко многим» в локальной таблице есть одна строка, которая может быть связана со многими строками в другой таблице. В примере из SQL для начинающих один Customer
может быть связан со многими Order
s.
В противоположном отношении « многие к одному» в локальной таблице может быть много строк, связанных с одной строкой в другой таблице. В нашем примере 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.
Надеюсь это поможет.