Граальс 1.3.7 + 2.0, раздел 5.2.1.1, Много-к-одному и один-к-одному - PullRequest
2 голосов
/ 14 августа 2011

В разделе 5.2.1.1 есть примеры A - C, которые кажутся немного запутанными:

Пример B: Это все еще отношение «многие к 1», как в примере A (т.е.такая же настройка таблицы)?В конце он говорит: «Чтобы создать истинное отношение один к одному, используйте свойство hasOne ...».

Пример C: когда используется hasOne, следует ли снова использовать ownTo?Это подразумевается?

Почему они показывают два варианта в примере C?Первый склонен к проблемам?

Я пытаюсь понять все действительные комбинации «многие к 1» и «Один к одному».

Спасибо

1 Ответ

3 голосов
/ 14 августа 2011

Я согласен, что их терминология немного сбивает с толку.Но я постараюсь помочь:

Много-к-одному (A)

Здесь они ссылаются на отношения, когда родительский объект указывает на один дочерний объект.Дочерний объект, однако, не знает о родительских отношениях.Причина (я полагаю), что они называют это «многие к одному», заключается в том, что уникальное сопоставление «один к одному» не применяется.Технически, один и тот же Нос может быть использован на нескольких Лицах , просто сохранив их в отношениях.И, если вы удалите Face , Nose продолжит существовать, просто без лица. (Это становится странно писать!)

Один к одному, хранящийся в родительской таблице (B)

Во втором примере они добавили belongsTo для обеспечения отношений один-к-одному.Это означает, что существование носа зависит от существования лица .Итак, теперь это настоящие отношения один к одному .Внешний ключ для этого отношения хранится в таблице Face , в зависимости от способа его настройки (см. Следующий раздел).

Один-к-одному, хранящийся в таблице Child (C)

В последнем примере это все еще один к одному.Однако изменение простого Nose nose на static hasOne = [nose:Nose] переместило внешний ключ в таблицу Nose .В этом случае вы используете belongsTo, потому что каждый нос может быть связан только с одним лицом .

в итоге

  • Простое задание Model model создает единую однонаправленную связь с ребенком.У ребенка нет прямого способа ссылаться на родительские отношения, и фактически он может быть связан с несколькими родительскими моделями.
  • Для двунаправленного индивидуального назначения требуется, чтобы ребенок belongTo был его родителем,который также обеспечивает целостность данных посредством каскадирования.
  • Двунаправленный один-к-одному, сохраненный на дочернем элементе, создается путем настройки родительского элемента на наличие одной (hasOne) дочерней модели.

Надеюсь, это немного поможет.(Я все еще думаю, что терминология Много-к-одному неудобна.)

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