使用sequelize.js检查logging/模型是否唯一

我有一个具有规范化数据的userAttribute表。 我看起来像这样:

UserAttribute = sequelize.define('userAttributes', { name: { type: Sequelize.STRING, allowNull: false }, value: { type: Sequelize.STRING, allowNull: false }, }; User.hasMany(userAttributes); userAttributes.belongsTo(User); 

一些数据必须是唯一的。 例如,如果名称是电子邮件,那么名称为电子邮件的其他logging不能使用该值,因为每个用户都必须具有唯一的电子邮件地址。

我知道我可以做一个模型validation,并在数据库中查找,但这似乎是非常低效的。 我也可以将所有必须在自己的列中的唯一的数据放在用户模型中,但是有一些好的方法可以将数据保存在userAttributes-table中吗? 例如检查整个模型是否是唯一的。

有可能是你的问题的解决scheme。

任何数量的属性

唯一的约束是通过数据库模型实施的。 由于您的问题中的设置有一个用户参数不确定,唯一剩下的选项确实是手动检查唯一性。

特定数量的属性

如果您想保存表userAttributes中的所有属性,但事先知道一定数量的属性,则还有另一种将用户连接到多个唯一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' }); 

那么你可以像这样创build一个用户(更新工作同样好):

 User.create({ email : { name : 'email', value : 'test@example.com' }, firstName : { name : 'firstName', value : 'John' }, lastName : { name : 'lastName', value : 'Doe' } });