2017-07-04 3 views
0

Wenn ich eine Tabelle mit den folgenden Feldern erstellen column_one, column_two, column_three, und ich möchte die Kombination (column_one: column_two) eindeutig sein, würde ich Folgendes tun:Sequelize, viele eindeutige zusammengesetzte Schlüssel mit dem gleichen Feld

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

Was passiert, wenn ich zwei eindeutige Kombinationen benötige, beide mit einem der Felder? Ex: (column_one: column_two) und (column_one: column_three) müssen beide eindeutig sein, obwohl (column_two: column_three)

wiederholt werden kann

Theoretisch wäre es so etwas wie:

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'} 

Dies ist kein Join-Tabelle, und ich möchte keine rohen Abfragen verwenden.

Auch column_one muss eindeutige Kombinationen mit 2 und 3 erstellen, aber es bedeutet nicht, dass Spalte eins, zwei und drei eine einzige eindeutige Kombination erstellen müssen.

Falls die Erklärung nicht klar ist, ich gebe ein Beispiel:

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

ist kein gültiger Satz von Daten, weil es zwei Reihen mit (column_one: column_two) = (11.12)

Aber

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

ist ein gültiger Satz von Daten

Antwort

1

über Migration s, können Sie sequelize addConstraint Methode

Vom Docs

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

Das Problem mit dieser Lösung wird in https://github.com/sequelize/cli/issues/462 behandelt. –

0

ich es geschafft, zu lösen dies mit Indizes verwenden. This is a link zur vollständigen Dokumentation von Sequelize docs. Wie für die Implementierung in dem Modell habe ich den folgenden Code nach dem Feld:

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

Ein ähnlicher Ansatz wird verwendet, wenn ich die Änderungen des Modells in eine bestehende Datenbank migrieren möchten:

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