Конкретный пример, где вы бы использовали отношение @OneToOne? - PullRequest
2 голосов
/ 15 декабря 2011

Этот ответ объясняет функциональные различия между @ManyToOne и @OneToOne.Тем не менее, я не понимаю - когда вы решите использовать @OneToOne?

Если я правильно понимаю, это означает, что каждый объект в таблице X сопоставлен (максимум) одному объекту в таблице Y, иникакие два X не отображаются на один и тот же Y.

Является ли подходящий вариант использования, где это уместно, дополнительными свойствами?Например, Автомобиль <-> Багажник, где у некоторых автомобилей есть багажник, и если они есть, они владеют им (бессмысленно говорить о багажнике без его автомобиля)?

Ответы [ 2 ]

6 голосов
/ 15 декабря 2011

Отображение наследования является хорошим кандидатом для однозначных отношений в базе данных.

Допустим, у вас есть таблица «Person» для хранения людей, работающих в компании, но человек может быть сотрудником.или подрядчик.В этом случае вы будете хранить все общие атрибуты в таблице Person.Например:

  • Имя
  • Адрес
  • Дата рождения
  • ...

Затем вы определяетеотношения один-к-одному с таблицей «Сотрудник» и «Подрядчик»:

Сотрудник:

  • Номер заработной платы
  • Зарплата
  • ...

Подрядчик:

  • Дневной тариф
  • Номер контракта
  • ...
3 голосов
/ 15 декабря 2011

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

Иногда существует естественное разделение информации, когда информация во второй таблице понадобится лишь в нескольких случаях, когда к информации в основной таблице часто обращаются.В этом случае также имеет смысл разделить его.По сути, это происходит, когда вещи попадают в два разных класса информации, но между ними необходимы взаимно-однозначные отношения.Например, у автомобиля может быть только один двигатель, но вы можете хранить технические сведения о двигателе в другом месте, чем информация о владельце автомобиля и лицензировании и т. Д., Поскольку вы будете использовать эту информацию по-разному в приложении.

Еще одно место - это когда у вас есть отношения один-к-одному, но вы планируете сделать это один-ко-многим в будущем.Возможно, в приложении по недвижимости вы начнете показывать только одно изображение дома, но вы планируете расширить его в следующем выпуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...