我试图使用Sequelize来表示一些MySQL表。 但是,我遇到了一些外键和约束问题。
我似乎无法弄清楚如何正确使用它们。
这是表格的MySql:
CREATE TABLE `users` (
`server_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`pw` varchar(128) COLLATE utf8_bin DEFAULT NULL,
`lastchannel` int(11) DEFAULT NULL,
`texture` longblob,
`last_active` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `users_id` (`server_id`,`user_id`),
UNIQUE KEY `users_name` (`server_id`,`name`),
KEY `users_channel` (`server_id`,`lastchannel`),
CONSTRAINT `users_server_del` FOREIGN KEY (`server_id`) REFERENCES `servers` (`server_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
这是我正在进行的Sequelize的工作:
module.exports = function(sequelize, DataTypes) {
var Users = sequelize.define('users', {
server_id: {type: Sequelize.INTEGER, allowNull: false},
user_id: {type: Sequelize.INTEGER, autoIncrement: true, allowNull: false, primaryKey: true},
name: {type: Sequelize.STRING(255), defaultValue: null},
pw: {type: Sequelize.STRING(128), defaultValue: null},
lastchannel: {type: Sequelize.INTEGER(11), defaultValue: null},
texture: Sequelize.BLOB,
last_active: {type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW, onUpdate: Sequelize.NOW}
}, {
indexes: [
{
name: 'users_id',
unique: true,
fields: ['server_id', 'user_id']
},
{
name: 'users_name',
unique: true,
fields: ['server_id', 'name']
},
{
name: 'users_channel',
fields: ['server_id', 'lastchannel']
},
]
});
Users.removeAttribute('id');
return Users;
};
正如您所看到的,我认为我的核心属性已经完成,因为它们应该和唯一键一样(我认为)。我遇到问题的地方是:
CONSTRAINT `users_server_del` FOREIGN KEY (`server_id`) REFERENCES `servers` (`server_id`) ON DELETE CASCADE
有人能给我任何关于如何最好地代表这条线的指示吗?
感谢您的时间
答案 0 :(得分:0)
您可以尝试sequelize-auto。
从命令行将现有表结构导出为js
模型非常方便:
sequelize-auto -o "./models" -d database_name -h host -u username -p 3306 -x my_password -e mysql
免责声明:我没有将其与约束一起使用,但查看该项目的测试,它似乎具有良好的外键支持。