Разница между отношениями один ко многим и многие к одному
Какова реальная разница между отношениями "один ко многим" и "многие к одному"? Это только наоборот, вроде как?
Я не могу найти никакого "хорошего и легкого для понимания" учебника по этой теме, кроме этого: SQL для начинающих: Часть 3-Отношения с базой данных
9 ответов:
Да, это наоборот. Это зависит от того, на какой стороне отношений присутствует сущность.
Например, если один отдел может нанимать несколько сотрудников, то отношение "отдел-сотрудник" - это отношение "один ко многим" (1 отдел нанимает много сотрудников), а отношение "сотрудник-отдел" - отношение "многие к одному" (многие сотрудники работают в одном отделе).дополнительная информация о типах отношений:
Из http://www.sum-it.nl/cursus/dbdesign/english/intro030.php3
Большинство отношений между таблицами являются один ко многим.
Пример:
* One area can be the habitat of many readers. * One reader can have many subscriptions. * One newspaper can have many subscriptions.Отношение многих к одному такое же, как один ко многим, но с другой стороны. точка зрения.
* Many readers live in one area. * Many subscriptions can be of one and the same reader. * Many subscriptions are for one and the same newspaper.
Какова реальная разница между отношениями "один ко многим" и "многие к одному"?Существуют концептуальные различия между этими терминами, которые должны помочь вам визуализировать данные, а также различия в созданной схеме, которые должны быть полностью поняты. В основном разница составляет один из хоть и перспективу.В отношенииодин ко многим локальная таблица имеет одну строку, которая может быть связана со многими строками в другой таблице. В примере из SQL for beginners , один
Customerможет быть связан со многимиOrders.В противоположном отношении много к одному локальная таблица может иметь много строк, связанных с одной строкой в другой таблице. В нашем примере множество
Кроме того, схема, поддерживающая связь, может быть представлена по-разному в таблицахOrders может быть связано с однимCustomer. Это концептуальное различие важно для ментального представления.CustomerиOrder. Если клиент имеет столбцыidиname:id,name 1,Bill Smith 2,Jim KenshawТогда для
Customer, чтобы быть связанным сOrders, многие реализации 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_idid, мы увидим, что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 Smith1.Также возможно, что существует другая таблица, которая, например, описывает отношения
CustomerиOrder, так что никакие дополнительные поля не добавляются ни в одну из таблиц. Таким образом, вOrderне может бытьcustomer_id, а может бытьCustomer_Orderтаблица, содержащая следующее. Какой механизм зависит от вашего схема и реализация SQL.customer_id,order_id 1,10 1,11 2,12Надеюсь, что это помогает.
Ответ на ваш первый вопрос: оба похожи,
Ответ на ваш второй вопрос: один ко многим -> у мужчины (таблица мужчин) может быть более одной жены(таблица женщин) много к одному- > более одной женщины вышли замуж за одного мужчину.
Теперь, если вы хотите связать это отношение с двумя таблицами мужчина и женщина, одна строка таблицы мужчина может иметь много отношений со строками в таблице женщины. надеюсь, это ясно.
Нет никакой разницы. Это просто вопрос языка и предпочтений относительно того, каким образом вы устанавливаете отношения.
Один-ко-многим и многие-к-одному подобны по множественности, но не по аспекту (т. е. направленности).
Отображениеассоциаций между классами сущностей иотношений между таблицами. Существует две категории отношений:
- множественность (термин ER: мощность)
- отношения один к одному : пример муж и жена
- отношения один-ко-многим : пример мать и дети
- отношения "многие ко многим" : пример ученика и субъекта
- направленность : не влияет на отображение, но влияет на то, как мы можем получить доступ к данным.
- однонаправленные отношения : поле отношений или свойство, которое ссылается на другую сущность.
- двунаправленные отношения : каждая сущность имеет поле отношений или свойство, которое ссылается на другую сущность.
- - - - Один ко многим - - - родители могут иметь двух или более детей.
- - - Много к одному - - - эти 3 ребенка могут иметь одного родителя.
Оба они похожи. Это может быть использовано принадлежит к необходимости. Если вы хотите найти детей для конкретных родителей, то вы можете пойти с одним ко многим. или же, если вы хотите найти родителей для Близнецов, вы можете пойти со многими к одному. Также....,
Практической разницы нет. Просто используйте отношения, которые имеют наибольший смысл, учитывая то, как вы видите свою проблему, как проиллюстрировал Девендра.
Класс One-to-many имеет родительский класс, содержащий n дочерних классов, поэтому он является отображением коллекции. у mant-to-one есть n детей, содержащих одного родителя, поэтому это отображение объекта
Comments