В чем разница между отношениями «один ко многим» и «многие к одному»? Это только обратное, вроде?
Я не могу найти никакого «хорошего и простого для понимания» руководства по этой теме, кроме этой: SQL для начинающих: Часть 3 - Взаимосвязи с базами данных
Ответы:
Да, наоборот. Это зависит от того, на какой стороне отношений присутствует сущность.
Например, если один отдел может нанять нескольких сотрудников, тогда отношения между отделами являются отношениями «один ко многим» (в 1 отделе работает много сотрудников), а отношения между сотрудниками - «многие к одному» (многие сотрудники работают в одном отделе).
Подробнее о типах отношений:
Отношения с базами данных - документация IBM DB2
источник
На этой странице о терминологии базы данных
источник
Между этими терминами существуют концептуальные различия, которые должны помочь вам визуализировать данные, а также возможные различия в сгенерированной схеме, которые следует полностью понять. В основном разница заключается в перспективе.
В отношении « один ко многим» в локальной таблице есть одна строка, которая может быть связана со многими строками в другой таблице. В примере из SQL для начинающих один
Customer
может быть связан со многимиOrder
s.В противоположном отношении « многие к одному» в локальной таблице может быть много строк, связанных с одной строкой в другой таблице. В нашем примере
Order
с одним может быть связано множество sCustomer
. Это концептуальное различие важно для ментального представления.Кроме того, схема , которая поддерживает отношения могут быть представлены по- разному в
Customer
иOrder
таблицах. Например, если у клиента есть столбцыid
иname
:Затем, чтобы a
Order
был связан с aCustomer
, многие реализации SQL добавляют вOrder
таблицу столбец, в котором хранитсяid
связанныйCustomer
(в этой схемеcustomer_id
:В приведенных выше строках данных, если мы посмотрим на
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
.В этом случае схемы « один ко многим» и « многие к одному» являются концептуальными, поскольку между ними нет изменений схемы. Какой механизм зависит от вашей схемы и реализации SQL.
Надеюсь это поможет.
источник
javax.persistence.OneToMany
иначе, чем вManyToOne
. Вы говорите, что они синонимы или это зависит от реализации? Мой ответ неверен?Нет никакой разницы. Это просто вопрос языка и предпочтений относительно того, как вы описываете отношения.
источник
Ответ на ваш первый вопрос: оба похожи,
Ответ на ваш второй вопрос: один-ко-многим -> МУЖЧИНА (таблица МУЖЧИНА) может иметь более одной жены (ЖЕНСКАЯ таблица) многие-к-одному -> более чем одна женщина вышла замуж за одного МУЖЧИНА.
Теперь, если вы хотите связать это отношение с двумя таблицами MAN и WOMEN, одна строка таблицы MAN может иметь много связей со строками в таблице WOMEN. надеюсь это ясно.
источник
пример
Две таблицы с одним отношением
SQL
В SQL существует только один вид отношений - ссылка. (Ваш интерфейс может делать полезные или запутанные вещи [например, в некоторых ответах], но это уже другая история.)
Ссылки
на первичный ключе в других таблицах ( Ссылки на сайтах изд таблица)
В терминах SQL Bar ссылается на Foo
Не наоборот
Поскольку
Foo.Foo
это первичный ключ, он уникален, существует только одна строка для любого заданного значенияFoo
Bar.Foo
это ссылка, внешний ключ и на нем нет уникального индекса, может быть много строк для любого заданного значенияFoo
Foo::Bar
один ко многимBar::Foo
- многие к одному.Bar
строки есть только однаFoo
строка, на которую она ссылается.Отношение только одно, поэтому разницы нет. Восприятие (с одного «конца» или с другого «конца») или чтение в обратном направлении не меняют отношения.
мощность
Мощность сначала объявляется в модели данных, что означает логическое и физическое (намерение), а затем - в реализации (реализованное намерение).
мощность
Один к нулю ко многим
В SQL это все, что требуется (см. Выше).
Один к одному ко многим
Вам нужна транзакция, чтобы применить транзакцию в таблице ссылок.
Один к нулю к одному
Вам нужно
Bar
:Один к одному
Вам нужна транзакция, чтобы применить транзакцию в таблице ссылок.
Многие ко многим
На физическом уровне такого не существует (напомним, в SQL есть только один тип отношений).
На ранних логических уровнях во время упражнения по моделированию удобно провести такую связь. Прежде чем модель приблизится к реализации, лучше использовать только то, что может существовать. Такое отношение разрешается путем реализации ассоциативной таблицы.
Решено "многие ко многим"
источник
Один-ко-многим и многие-к-одному похожи по множественности, но не по аспекту (то есть по направленности).
Отображение ассоциаций между классами сущностей и связей между таблицами. Есть две категории отношений:
источник
Практической разницы нет. Просто используйте отношения, которые имеют наибольший смысл с учетом того, как вы видите свою проблему, как проиллюстрировал Девендра.
источник
--- Многие к одному --- У этих трех детей могут быть одни родители.
Оба похожи. Это может быть использовано при необходимости. Если вы хотите найти детей для определенных родителей, вы можете выбрать One-To-Many. Или, если хотите найти родителей для близнецов, вы можете пойти с Many-To-One. Точно так же ....,
источник
один-ко-многим имеет родительский класс, содержащий n дочерних элементов, поэтому это отображение коллекции.
много-к-одному имеет n количество дочерних элементов, содержит одного родителя, поэтому это отображение объекта
источник