Подтвердить что ты не робот

Разница между HasOne и BelongsTo в Sequelize ORM

Я разрабатываю приложение sails.js с sequelize ORM. Я немного смущен, когда нужно использовать BelongsTo и HasOne.

В документации указано, что:

BelongsTo - ассоциации, где внешний ключ для взаимно однозначное отношение существует на исходной модели.

Ассоциации HasOne - ассоциации, в которых внешний ключ для на целевой модели существует взаимно однозначное отношение.

Есть ли другая разница, кроме того места, где они указаны? В обоих случаях поведение по-прежнему остается одинаковым?

4b9b3361

Ответ 1

Это более универсальная проблема.

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

У человека есть только одна правая рука. Правая рука принадлежит одному человеку.

Сказать, что это наоборот выглядит немного странно:

В правой руке есть мужчина. Человек принадлежит к правой руке.

Вы можете иметь человека без правой руки. Но одна правая рука бесполезна.

В случае продолжения, если RightArm и Men являются моделями, это может выглядеть так:

Man.hasOne(RightArm);
RightArm.belongsTo(Man);

И как вы заметили, есть также разница в структуре таблицы db:

BelongsTo добавит foreignKey в источник, где hasOne добавит в целевой (Sequelize создает новый столбец "ManId" в таблице "RightArm", но не создает столбец "RightArmId" в ' Man ').

Я больше не вижу различий.