Я согласен, что их терминология немного сбивает с толку.Но я постараюсь помочь:
Много-к-одному (A)
Здесь они ссылаются на отношения, когда родительский объект указывает на один дочерний объект.Дочерний объект, однако, не знает о родительских отношениях.Причина (я полагаю), что они называют это «многие к одному», заключается в том, что уникальное сопоставление «один к одному» не применяется.Технически, один и тот же Нос может быть использован на нескольких Лицах , просто сохранив их в отношениях.И, если вы удалите Face , Nose продолжит существовать, просто без лица. (Это становится странно писать!)
Один к одному, хранящийся в родительской таблице (B)
Во втором примере они добавили belongsTo
для обеспечения отношений один-к-одному.Это означает, что существование носа зависит от существования лица .Итак, теперь это настоящие отношения один к одному .Внешний ключ для этого отношения хранится в таблице Face , в зависимости от способа его настройки (см. Следующий раздел).
Один-к-одному, хранящийся в таблице Child (C)
В последнем примере это все еще один к одному.Однако изменение простого Nose nose
на static hasOne = [nose:Nose]
переместило внешний ключ в таблицу Nose .В этом случае вы используете belongsTo
, потому что каждый нос может быть связан только с одним лицом .
в итоге
- Простое задание
Model model
создает единую однонаправленную связь с ребенком.У ребенка нет прямого способа ссылаться на родительские отношения, и фактически он может быть связан с несколькими родительскими моделями. - Для двунаправленного индивидуального назначения требуется, чтобы ребенок
belongTo
был его родителем,который также обеспечивает целостность данных посредством каскадирования. - Двунаправленный один-к-одному, сохраненный на дочернем элементе, создается путем настройки родительского элемента на наличие одной (
hasOne
) дочерней модели.
Надеюсь, это немного поможет.(Я все еще думаю, что терминология Много-к-одному неудобна.)