How do I create tables with foreign key relationships with one another through the Sequelize QueryInterface?
The .createTable()
method takes in a dictionary of columns. You can see the list of valid attributes in the documentation for .define()
, specifically by looking at the [attributes.column.*]
rows within the params table.
To create an attribute with a foreign key relationship, use the “references” and “referencesKey” fields:
For example, the following would create a users
table, and a user_emails
table which references the users table.
queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}
}).then(function() {
queryInterface.createTable('user_emails', {
userId: {
type: Sequelize.INTEGER,
references: { model: 'users', key: 'id' }
}
})
});
What columns and helper tables are required by sequelize? For example, it appears that specific columns such as createdAt or updatedAt are expected.
It appears that a standard model will expect an id
, updatedAt
, and createdAt
column for each table.
queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
createdAt: {
type: Sequelize.DATE
},
updatedAt: {
type: Sequelize.DATE
}
}
If you set paranoid
to true
on your model, you also need a deletedAt
timestamp.