2015-04-10 14 views
9

Ich habe ein einfaches Sequelize-Modell, das mit anderen Modellen verknüpft ist.Eindeutige Einschränkung über Fremdschlüssel in Sequelize-Modell

module.exports = function (sequelize, DataTypes) { 
    var Votes = sequelize.define('Votes', { 
    isUpVote: DataTypes.BOOLEAN 
    }, { 
    classMethods: { 
     associate: function (models) { 
     Votes.belongsTo(models.Track); 
     Votes.belongsTo(models.User); 
     } 
    } 
    }); 

    return Votes; 
} 

Sequelize wird eine Tabelle mit einer id, TrackId, UserId und isUpVote erzeugen.

Ich möchte eine UNIQUE Constraint über TrackId und UserId (d. H. Einen zusammengesetzten Index, der sicherstellen, dass es nur eine Stimme für eine bestimmte Spur und Benutzer gibt).

Wie kann das gemacht werden?

Antwort

9

Sie können die eindeutige Einschränkung verwenden und geben Sie eine Zeichenfolge statt Bool. Dann werden andere andere Felder mit derselben Zeichenfolge Teil desselben zusammengesetzten Indexes.

d.h .:

module.exports = function (sequelize, DataTypes) { 
    var Votes = sequelize.define('Votes', { 
     isUpVote: { 
      type: DataTypes.BOOLEAN, 
      unique: 'myCompositeIndexName' 
     }, 
     TrackId: { 
      type: DataType.INTEGER 
      unique: 'myCompositeIndexName', 
     }, 
     UserId: { 
      type: DataType.INTEGER 
      unique: 'myCompositeIndexName', 
     } 
    }, { 
     classMethods: { 
      associate: function (models) { 
       Votes.belongsTo(models.Track); 
       Votes.belongsTo(models.User); 
      } 
     } 
    }); 

    return Votes; 
} 

(^ Nicht getestet, direkt an der Spitze von meinem Kopf!)

Das Problem dabei ist, dass dies nur bei der Erstellung einer Tabelle auftreten. Wenn die Tabelle bereits vorhanden ist, können Sie dies mithilfe der Migrationsfunktion von sequelize-cli erreichen.

Ich hoffe wirklich, das hilft Ihnen sonst zumindest weist Sie in die richtige Richtung. Wenn du immer noch feststeckst, empfehle ich dir, zum IRC-Kanal zu gehen, um weiter zu machen, da es ziemlich aktiv zu sein scheint.

+0

Wie würden Sie einen zusammengesetzten eindeutigen Index für eine Join-Tabelle in einer n: viele Situation definieren? –

Verwandte Themen