我正在尝试在两个实体之间建立一对一的关系。我正在使用sequelize
作为数据库mysql
的ORM。
我的模型定义如下:
var user = (sequelize, DataTypes) => {
const User = sequelize.define('user', {
name: {type: DataTypes.STRING, allowNull: false, unique: true }
}, {
timestamps: false
});
return User;
};
var product = (sequelize, DataTypes) => {
const Product = sequelize.define('product', {
title: {type: DataTypes.STRING, allowNull: false, unique: true, default: 'Coop Default' }
}, {
timestamps: false
});
return Product;
};
和下面的代码行一对一的关系
db.product.belongsTo(db.user);
db.user.hasOne(db.product);
但是,这不会在表products
中创建唯一的外键。
mysql> desc products;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | UNI | NULL | |
| userId | int(11) | YES | MUL | NULL | |
+--------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
在ORM中我还应该做些什么以确保userId
是唯一的?
答案 0 :(得分:0)
通过在模型定义中提到它,我可以对ForeignKey强制使用unique
约束,显然,sequelize不能从关联中做到这一点。
var product = (sequelize, DataTypes) => {
const Product = sequelize.define('product', {
title: { type: DataTypes.STRING,
allowNull: false,
unique: true
},
userId: { type: DataTypes.INTEGER,
allowNull: false,
unique: true
}
}, {
timestamps: false
});
return Product;
};