Быть в спящем режиме - почему использование many-one для представления непосредственного?

Я видел, что люди используют many-one отображения для представления непосредственных отношений. Я также считал это в книге Gavin King и на статьях.

Например, если у клиента может быть точно один адрес поставки, и адрес поставки может принадлежать только одному клиенту, отображение дано как:

<class name="Customer" table="CUSTOMERS">
    ...
    <many-to-one name="shippingAddress"
                 class="Address"
                 column="SHIPPING_ADDRESS_ID"
                 cascade="save-update"
                 unique="true"/>
    ...
</class>

Книга рассуждает как (заключение в кавычки его):

"Вы не заботитесь о том, что находится на целевой стороне ассоциации, таким образом, можно рассматривать ее как к - одна ассоциация без многих отделяется".

Мой вопрос, почему использование many-to-one и нет one-to-one? Что это о a one-to-one это делает это менее желательной опцией к many-to-one?

Спасибо.

42
задан Rui Vieira 9 December 2012 в 12:41
поделиться

3 ответа

Там есть несколько способов реализовать однозначную связь в базе данных: вы можете поделиться первичным ключом, но вы также можете использовать отношения внешнего ключа с уникальным ограничением (одна таблица имеет столбец внешнего ключа, который ссылается на первичный ключ связанная таблица).

В последнем случае способ отображения в спящем режиме - использовать ассоциацию многие-к-одному (которая позволяет указать внешний ключ).

Причина проста: вам все равно, что находится на целевой стороне связи , поэтому вы можете относиться к ней как к индивидуальной связи без многие части. Все, что вам нужно, - это выразить «Эта сущность имеет свойство, которое является ссылкой на экземпляр другой сущности» и использовать поле внешнего ключа для {{ 1}} представляют эти отношения.

Другими словами, использование многие-к-одному - это способ сопоставить взаимно однозначные ассоциации внешних ключей (которые на самом деле могут быть более частыми, чем взаимно-однозначные ассоциации с общим первичным ключом ).

34
ответ дан 26 November 2019 в 23:58
поделиться

Это даже в официальных документах Hibernate: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/associations.html#assoc-bidirectional-121 .

Это не совсем необоснованно. Конец многие-к-одному говорит: Я сопоставлен через один из моих столбцов с идентификатором -one конца. Вы должны использовать одну и ту же схему базы данных для связи «многие к одному».

0
ответ дан 26 November 2019 в 23:58
поделиться

Я бы сказал, что проблема в основном связана с объектно-реляционным несоответствием импеданса. Чтобы иметь возможность связать два представления объекта в базе данных, вам необходимо иметь какую-то связь между их таблицами. Однако базе данных известно только отношение 1: N: все остальные являются производными от него.

С реляционными базами данных и объектными языками разработчик должен найти наименее неестественное представление концепции, которую он / она хочет представить (в данном случае отношения 1: 1).

3
ответ дан 26 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: