使用sequelize.js

时间:2016-06-28 08:09:05

标签: node.js sequelize.js

我有一个带有规范化数据的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表中吗?例如,检查整个模型是否唯一。

1 个答案:

答案 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'
    }
});