在Sequelize.js种子模型中引用复合主键

时间:2018-08-21 23:10:01

标签: database postgresql sequelize.js

是否可以在Sequelize中引用复合主键?

我正在开发一个网络应用程序,可帮助组织厨房垃圾。该餐厅将其数周和数月的时间分为“期间”,9月的第一周为“ 9.1”。对于每个时期,我需要创建一批新的配料对象,以跟踪其在那个时期的价格和数量。我认为最好使句点主键成为月份和星期的组合,因为这在数据库中是唯一的。 我可能会在以后再加上一年,但这不会改变我的问题。

我正在使用的数据库是Postgres。

这是我的sequelize种子文件中的周期表模型:

.then(() => queryInterface.createTable('periods', {
      month: {
        type: Sequelize.INTEGER,
        validate: {
          max: 12,
          min: 1
        },
        unique: "monthWeekConstraint",
        primaryKey: true
      },
      week: {
        type: Sequelize.INTEGER,
        validate: {
          max: 4,
          min: 1
        },
        unique: "monthWeekConstraint",
        primaryKey: true
      },
      createdAt: {
        type: Sequelize.DATE
      },
      updtedAt: {
        type: Sequelize.DATE
      }
    }))

我想在我的periodItems表中引用存储在上表中的周期,该周期(不正确地)如下:

.then(() => queryInterface.createTable('periodItems', {
  periodMonth: {
    type: Sequelize.INTEGER,
    references: {model: 'periods', key: 'monthWeekConstraint'}
  },
  periodWeek: {
    type: Sequelize.INTEGER,
    references: {model: 'periods', key: 'monthWeekConstraint'}
  },
  day: {
    type: Sequelize.INTEGER,
    validate: {
      min: 1,
      max: 7
    }
  },
...other irrelevant fields...
}))

我绝对不是数据库新手,所以如果我走了,我深表歉意。我还有其他几张桌子可以做我想做的事,但是我在这个问题上呆了几天。

2 个答案:

答案 0 :(得分:3)

虽然可以通过在多列中指定primaryKey: true在Sequelize中创建复合主键(如上所述),但是Sequelize当前不支持复合外键,因此无法引用具有复合主键的模型/表。

有关该主题的讨论,请参见https://github.com/sequelize/sequelize/issues/311

答案 1 :(得分:1)

--[[--
  Use this file to specify **User** preferences.
  Review [examples](+/Volumes/ZeroBraneStudio/ZeroBraneStudio.app/Contents/ZeroBraneStudio/cfg/user-sample.lua) or check [online documentation](http://studio.zerobrane.com/documentation.html) for details.
--]]--

  keymap[ID.REPPLACEINFILES] = "Ctrl-Alt-R"
  keymap[ID.REPLACE]         = "Ctrl-Shift-R"
  keymap[ID.COMMENT]         = "Ctrl-R"