Est-il possible de référencer des clés primaires composites dans Sequelize?
Je travaille sur une application Web qui aide à organiser les déchets de cuisine. Le restaurant organise ses semaines et mois en "périodes" où la première semaine de septembre serait "9,1". Pour chaque période, je dois créer un nouveau lot d'objets d'ingrédients qui peuvent garder une trace de leurs prix et quantités pour cette période. Je pense qu'il serait préférable de faire des clés primaires de période leur mois et leur semaine combinés, car cela sera unique dans la base de données. Je peux ajouter un an plus tard, mais cela ne change pas mon problème.
La base de données avec laquelle je travaille est Postgres.
Voici mon modèle de table de période dans mon fichier de semences séquentiel:
.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
}
}))
Je voudrais faire référence aux périodes stockées dans le tableau ci-dessus dans ma table periodItems, à laquelle je ressemble (incorrectement):
.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...
}))
Je suis définitivement nouveau dans les bases de données, donc je m'excuse si je suis loin. J'ai obtenu quelques autres tables faisant ce que j'aimerais, mais je suis coincé sur ce problème depuis quelques jours.
Bien qu'il soit possible de créer des clés primaires composites dans Sequelize en spécifiant primaryKey: true
contre plus d'une colonne (comme vous l'avez déjà fait ci-dessus), Sequelize ne prend actuellement pas en charge les clés étrangères composites, il n'y a donc aucun moyen de référencer un modèle/table qui a des clés primaires composites.
Voir https://github.com/sequelize/sequelize/issues/311 pour une discussion sur le sujet.