我有一个带有规范化数据的userAttribute表。我看起来像这样:
UserAttribute = sequelize.define('userAttributes', {
name: {
type: Sequelize.STRING,
allowNull: false
},
value: {
type: Sequelize.STRING,
allowNull: false
},
};
User.hasMany(userAttributes);
userAttributes.belongsTo(User);
有些数据必须是唯一的。例如,如果名称是电子邮件,则该值不能被另一个名称为email的记录使用,因为每个用户都必须拥有唯一的电子邮件。
我知道我可以进行模型验证并在数据库中查找,但这似乎非常低效。我还可以在User-model中将所有必须唯一的数据放在他们自己的列中,但是有一些好的方法可以将数据保存在userAttributes表中吗?例如,检查整个模型是否唯一。
答案 0 :(得分:1)
您的问题可能有解决方案。
通过数据库模型强制执行唯一约束。由于您的问题中的设置具有无限量参数的用户,因此唯一的选项是确实手动检查唯一性。
如果您希望保存表userAttributes中的所有属性,但事先知道一定数量的属性,则可以使用另一种方法将User连接到多个唯一的userAttributes。
为每个属性指定两个模型之间的关系,例如:克。
UserAttribute = sequelize.define('userAttributes', {
name: {
type: Sequelize.STRING,
allowNull: false
},
value: {
type: Sequelize.STRING,
allowNull: false
}
};
User.hasOne(UserAttribute, {
as : 'email'
});
User.hasOne(UserAttribute, {
as : 'firstName'
});
User.hasOne(UserAttribute, {
as : 'lastName'
});
然后你可以像这样创建一个用户(更新同样有效):
User.create({
email : {
name : 'email',
value : 'test@example.com'
},
firstName : {
name : 'firstName',
value : 'John'
},
lastName : {
name : 'lastName',
value : 'Doe'
}
});