Продолжить не создавать внешние ключи в БД, как ожидалось

#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.