首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql对架构进行后缀

问MySql对架构进行后缀
EN

Stack Overflow用户
提问于 2015-10-14 19:20:25
回答 1查看 1.3K关注 0票数 1

我试图使用Sequelize来表示一些MySQL表。但是,在外键和约束方面,我遇到了一些问题。

我似乎想不出如何正确地使用它们。

下面是表的MySql:

代码语言:javascript
复制
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;

下面是我正在为续写做的工作:

代码语言:javascript
复制
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;
};

正如您所看到的,我认为我已经完成了核心属性,而且它们应该是唯一的键(我认为)。我遇到问题的地方是:

代码语言:javascript
复制
CONSTRAINT `users_server_del` FOREIGN KEY (`server_id`) REFERENCES `servers` (`server_id`) ON DELETE CASCADE

有人能给我指点如何最好地表示这条线吗?

谢谢您抽时间见我

EN

回答 1

Stack Overflow用户

发布于 2018-10-03 10:02:58

你可以试试自动续写。

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

代码语言:javascript
复制
sequelize-auto -o "./models" -d database_name -h host -u username -p 3306 -x my_password -e mysql

免责声明:我没有在约束条件下使用它,但是查看项目的测试,它似乎有很好的外键支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33133832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档