Sequelize ссылки на модели против ассоциаций
Просто начну использовать Sequelize, и я настроил кучу моделей и семян, но я не могу понять ссылки и ассоциации. Я не вижу примера использования для ссылок, если они даже делают то, что я думаю, что они делают, но я не мог найти хорошее объяснение в документах.
Является ли это избыточным, имеющим ссылки и ассоциации?
module.exports = (sequelize, DataTypes) => {
const UserTask = sequelize.define('UserTask',
{
id: {
primaryKey: true,
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4
},
userId: {
type: DataTypes.UUID,
references: { // <--- is this redundant to associate
model: 'User',
key: 'id'
}
}
// ... removed for brevity
},
{
classMethods: {
associate: models => { <--- makes references redundant?
UserTask.belongsTo(models.User, {
onDelete: 'CASCADE',
foreignKey: {
fieldName: 'userId',
allowNull: true,
require: true
},
targetKey: 'id'
});
}
}
}
);
return UserTask;
};
Ответы
Ответ 1
Используя references
вы создаете ссылку на другую таблицу без добавления каких-либо ограничений или связей. Это означает, что это просто способ сообщить базе данных, что эта таблица имеет ссылку на другую.
Создание association
добавит ограничение внешнего ключа к атрибутам. И вы можете выполнять всю магию за этим функции ассоциации. т.е. User.getTasks();
Более подробная информация о references
здесь: https://sequelize.readthedocs.io/en/latest/docs/associations/#foreign-keys_1
Об association
здесь: http://docs.sequelizejs.com/manual/tutorial/associations.html
Ответ 2
https://github.com/sequelize/sequelize/issues/11026
references: { model: { schema: 'schema_name', tableName: 'table_name' }, key: 'id' }