#node.js #postgresql #sequelize.js
#node.js #postgresql #sequelize.js
Вопрос:
Учитывая этот ERD, я пытаюсь понять, почему внешние ключи не создаются documentChildren
, и documentAttribute
поскольку у каждого из них есть столбец, который должен быть FK to document
.
Все мои модели sequelize работают нормально, но мне любопытно, что я делаю не так в том, что реальные FK не генерируются.
перенос документа:
'use strict'
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('documents', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
},
...
})
}
...
}
Миграция documentChildren:
'use strict'
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('documentChildren', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
},
documentId: {
allowNull: false,
type: Sequelize.UUID,
references: {
model: 'documents',
key: 'id'
}
},
...
})
}
...
}
Миграция documentAttribute:
'use strict'
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('documentAttributes', {
id: {
allowNull: false,
primaryKey: true,
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4
},
documentId: {
allowNull: false,
type: Sequelize.UUID,
references: {
model: 'documents',
key: 'id'
}
},
...
})
}
...
}
ассоциации моделей документов:
document.associate = function (models) {
document.hasMany(models.documentAttribute)
document.hasMany(models.documentChildren)
}
Комментарии:
1. в нем говорится
"documentId" uuid NOT NULL REFERENCES documents(id)
. Опция ссылок — FK — я думаю, вы путаете с индексами2. Дох! Вы правы. Спасибо, что указали на это.
3. опубликует это как ответ
Ответ №1:
Ваш код показывает
"documentId" uuid NOT NULL REFERENCES documents(id)
Это REFERENCES documents(id)
FK. Проверьте postgresql-docs
Вас смущает создание индексов, это не означает наличие FK.