Это мое определение модели таблицы Room
sequelize.define("room", {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
name: DataTypes.STRING,
business_id: {
type: DataTypes.INTEGER,
references: {
model:"business,
key: "id"
}
}
});
И это дело
sequelize.define("business", {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
name: DataTypes.STRING,
});
Теперь рассмотрим, что у меня есть id
комнаты со мной, и я хочу связать это дело с использованием внешнего ключа. В обычном SQL
я бы легко сделал это, используя inner join
Я знаю, что есть что-то вроде Ассоциации, используемой в Sequelize, но тогда в чем смысл определения ссылки в определении модели?
В соответствии с DOC:
Иногда вам может понадобиться ссылаться на другую таблицу, не добавляя никаких ограничений или ассоциаций. В этом случае вы можете вручную добавить ссылочные атрибуты к определению схемы и пометить отношения между ними.
Создание ассоциаций в sequelize выполняется путем вызова одной из функций belongsTo/hasOne/hasMany/принадлежит ToMany для модели (источника) и предоставления другой модели в качестве первого аргумента функции (цели).
- hasOne - добавляет внешний ключ к целевой и сингулярной ассоциации mixins к источнику.
- belongsTo - добавить к источнику внешний ключ и сингулярные ассоциации mixins.
- hasMany - добавляет внешний ключ к целевому и множественному объединению mixins к источнику.
- belongsToMany - создает связь N: M с таблицей соединений и добавляет множественные ассоциации mixins к источнику. Таблица соединений создается с помощью sourceId и targetId.
Создание ассоциации добавит ограничение внешних ключей к атрибутам. Все ассоциации используют CASCADE при обновлении и SET NULL при удалении, кроме n: m, который также использует CASCADE при удалении.
Я думаю, что это очистит ваши сомнения.