【问题标题】:Sequelize, many unique composite keys using same fieldSequelize,使用相同字段的许多唯一复合键
【发布时间】:2017-07-04 12:45:44
【问题描述】:

如果我正在设计一个包含以下字段的表格 column_one、column_two、column_three,并且我希望组合 (column_one:column_two) 是唯一的,我会执行以下操作:

column_one: { type: DataTypes.INTEGER, unique: 'composite_one'},
column_one: { type: DataTypes.INTEGER, unique: 'composite_one'},
column_three: { type: DataTypes.INTEGER}

如果我需要两个独特的组合,都包括其中一个字段,该怎么办?例如:(column_one:column_two) 和 (column_one:column_three) 必须都是唯一的,但 (column_two:column_three) 可以重复

理论上应该是这样的:

column_one: { type: DataTypes.INTEGER, unique: 'composite_one', unique: 'composite_two'},
column_one: { type: DataTypes.INTEGER, unique: 'composite_one'},
column_three: { type: DataTypes.INTEGER, unique: 'composite_two'}

这不是连接表,我不想使用任何原始查询。

另外,column_one 必须与 2 和 3 创建唯一的组合,但这并不意味着第一列、第二列和第三列必须创建一个唯一的组合。

如果解释不清楚,我举个例子:

column_one ----- column_two ---- column_three
-11---------------12----------------13-------
-11---------------12----------------14-------
-18---------------12----------------15-------

不是一组有效的数据,因为有两行 (column_one: column_two) = (11:12)

但是

column_one ----- column_two ---- column_three
-11---------------12----------------13-------
-11---------------17----------------12-------
-18---------------12----------------15-------
-11---------------12----------------15-------

是一组有效的数据

【问题讨论】:

    标签: sequelize.js composite-key unique-key


    【解决方案1】:

    我设法使用索引解决了这个问题。 This is a link 来自 sequelize docs 的完整文档。至于实现,在模型中,我在字段后面添加了以下代码:

    indexes: [
        { fields: ['column_one', 'column_two'], unique: true },
        { fields: ['column_one', 'column_three'], unique: true }
    ]
    

    如果我想将模型的更改迁移到现有数据库,则使用类似的方法:

    queryInterface.addIndex('epg_data', ['column_one', 'column_two'], {unique: true})
    queryInterface.addIndex('epg_data', ['column_one', 'column_three'], {unique: true})
    

    【讨论】:

      【解决方案2】:

      在您的迁移过程中,您可以使用 sequelize addConstraint 方法

      来自Docs

       queryInterface.addConstraint('Users', ['email', 'name'], { type: 'unique', name: 'custom_unique_constraint_name' });
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2020-12-15
      • 2011-01-17
      • 2017-02-03
      • 2017-12-18
      相关资源
      最近更新 更多