gpt4 book ai didi

sql - Sequelize 外键引用复合主键

转载 作者:行者123 更新时间:2023-12-03 22:25:12 26 4
gpt4 key购买 nike

我正在尝试使用 sequelize (postgre) 'Ingredient' 表创建,其中包含 normalizedName/userId 列,其中 normalizedName 每个 userId 都是唯一的。
第二个表是'IngredientQuantity',列成分Id/userId/quantity。
我尝试将'Ingredient' normalizedName 和userId 设置为primaryKey,并将'IngredientQuantity' 表中的复合PK 设置为外键,并带有成分ID,但我发现sequelize 无法做到这一点,只有normalizedName 用于外键中的引用。
什么是最好的方法来做到这一点?我想过 id 自动递增,但所有 id 都在所有用户之间共享。例如,用户 1 创建他的第一个成分 id = 1,当用户 2 创建他的第一个成分时,他的 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;
};
如果我考虑大量用户的大量数据,最好的方法是什么?还有其他解决方案吗?谢谢

最佳答案

使用 SERIAL 作为自动递增的整数代理 PK 是完全正常的。如果您以某种方式担心整数值范围不够,您也可以使用 UUID 作为自动生成的 PK(在这种情况下,您应该将默认值设置为 uuid_generate_v4() )。
因为它是一个服务领域,所以不需要它只对某个用户是唯一的。通常您不应该依赖 PK 值。

关于sql - Sequelize 外键引用复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64415542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com