2017-07-04 8 views
0

column_one、column_two、column_threeの組み合わせを(column_one:column_two)を一意にするには、次のようにします。同じフィールドを使用する多くのユニークなコンポジットキーをSequelize

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

フィールドのいずれかを含む2つのユニークな組み合わせが必要な場合はどうなりますか?例:(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との一意の組み合わせを作成する必要がありますが、1列目、2列目、3列目には1つの固有の組み合わせを作成する必要はありません。

説明は、私は例を与えている、明確でない場合:=(午前11時12分):(column_two column_one)との2つの行が存在するため

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

は、データの有効なセットではありません

しかし

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

はあなたの移行を介してデータ

答えて

1

の有効なセットですsが、私はこの使用して索引を解決するために管理Docs

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

この解決策の問題は、https://github.com/sequelize/cli/issues/462で解決しています。 –

0

からsequelize addConstraint方法

を使用することができます。 This is a linkをsequelize docsの完全なドキュメントに追加してください。

queryInterface.addIndex('epg_data', ['column_one', 'column_two'], {unique: true}) 
queryInterface.addIndex('epg_data', ['column_one', 'column_three'], {unique: true}) 
:私は既存のデータベースにモデルの変更を移行したい場合にも、同様のアプローチが使用され

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

:インプリメンテーションについては、モデル内のIフィールドの後に、次のコードを追加しました

関連する問題