MySql到Sequelize Schema

时间:2015-10-14 19:20:25

标签: javascript node.js sequelize.js

我试图使用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

有人能给我任何关于如何最好地代表这条线的指示吗?

感谢您的时间

1 个答案:

答案 0 :(得分:0)

您可以尝试sequelize-auto

从命令行将现有表结构导出为js模型非常方便:

sequelize-auto -o "./models" -d database_name -h host -u username -p 3306 -x my_password -e mysql

免责声明:我没有将其与约束一起使用,但查看该项目的测试,它似乎具有良好的外键支持。