【发布时间】:2021-02-01 12:47:52
【问题描述】:
我正在尝试使用 sequelize (postgre) 'Ingredient' 表创建带有 normalizedName/userId 列,其中 normalizedName 每个 userId 都是唯一的。
第二个表是“IngredientQuantity”,列有成分Id/userId/quantity。
我尝试将“Ingredient” normalizedName 和 userId 设置为primaryKey,并将“IngredientQuantity”表中的这个复合 PK 设置为外键,但我发现使用 sequelize 是不可能的,只有 normalizedName 用于外键中的引用.
什么是最好的方法?我考虑过 id 自动递增,但所有 id 都在所有用户之间共享。例如 user1 创建他的第一个成分,id = 1,当 user2 创建他的第一个成分时,他将有 id = 2。所以。我不知道这是否是个好主意,如果所有用户都有很多成分,我应该使用 bigint 等。如果他们删除/添加/删除/添加 id 会长大。
配料表
module.exports = (sequelize, DataTypes) => {
var Ingredient = sequelize.define('ingredient', {
name: DataTypes.STRING,
normalizedName: { type: DataTypes.STRING, primaryKey: true },
userId: { type: DataTypes.INTEGER, primaryKey: true }
}, {
freezeTableName: true
});
Ingredient.associate = function (models) {
models.ingredient.hasMany(models.ingredientQuantity);
models.ingredient.belongsTo(models.user, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
};
return Ingredient;
};
成分数量表
module.exports = (sequelize, DataTypes) => {
var IngredientQuantity = sequelize.define('ingredientQuantity', {
quantity: DataTypes.FLOAT,
}, {
freezeTableName: true
});
IngredientQuantity.associate = function (models) {
models.ingredientQuantity.belongsTo(models.ingredient);
models.ingredientQuantity.belongsTo(models.user, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
};
return IngredientQuantity;
};
如果我考虑大量用户的大量数据,那么最好的方法是什么?还有其他解决方案吗?谢谢
【问题讨论】:
标签: sql node.js postgresql sequelize.js