当前位置: 首页 > 知识库问答 >
问题:

为什么sequelize会在一个模型中创建两个foreign_keys的同时自动创建一个key?

鲁鸿
2023-03-14

我创建了三个表:designer,tag,designer_tag.designer_tag是一个带有两个外键的表,它们是designer的id和tag的id。

表[设计器]:

module.exports = (sequelize, DataTypes) => {
    let Designer = sequelize.define('Designer', {
        id: {
            allowNull: false,
            autoIncrement: true,
            comment: 'ID',
            primaryKey: true,
            type: DataTypes.INTEGER(11).UNSIGNED
        },
        name: {
            allowNull: false,
            comment: 'name',
            defaultValue: '',
            type: DataTypes.STRING(10)
        },
        begin_time: {
            allowNull: false,
            comment: 'begin_time',
            defaultValue: 0,
            type: DataTypes.INTEGER(10).UNSIGNED
        },
        avatar: {
            allowNull: false,
            comment: 'avatar',
            defaultValue: '',
            type: DataTypes.STRING(120)
        },
        description: {
            allowNull: false,
            comment: 'description',
            defaultValue: '',
            type: DataTypes.STRING(120)
        },
        create_time: {
            allowNull: false,
            comment: 'create time',
            defaultValue: 0,
            type: DataTypes.INTEGER(10).UNSIGNED
        }
    }, {
        comment: 'designer',
        freezeTableName: true,
        tableName: 'designer',
        timestamps: false,
        underscored: true
    });
    Designer.associate = models => {
        Designer.hasOne(models.DesignerTag);
    };
    return Designer;
};

表[标记]:

module.exports = (sequelize, DataTypes) => {
    let Tag = sequelize.define('Tag', {
        id: {
            allowNull: false,
            autoIncrement: true,
            comment: 'ID',
            primaryKey: true,
            type: DataTypes.INTEGER(11).UNSIGNED
        },
        name: {
            allowNull: false,
            comment: 'name',
            defaultValue: '',
            type: DataTypes.STRING(20)
        },
        create_time: {
            allowNull: false,
            comment: 'create time',
            defaultValue: 0,
            type: DataTypes.INTEGER(10).UNSIGNED
        }
    }, {
        comment: 'tag',
        freezeTableName: true,
        indexes: [{
            name: 'name',
            method: 'BTREE',
            fields: ['name'],
            unique: true
        }],
        tableName: 'tag',
        timestamps: false,
        underscored: true
    });
    Tag.associate = models => {
        Tag.hasOne(models.DesignerTag);
    };
    return Tag;
};

表[designer_tag]:

module.exports = (sequelize, DataTypes) => {
    let DesignerTag = sequelize.define('DesignerTag', {
        id: {
            allowNull: false,
            autoIncrement: true,
            comment: 'ID',
            primaryKey: true,
            type: DataTypes.INTEGER(11).UNSIGNED
        },
        create_time: {
            allowNull: false,
            comment: 'create time',
            defaultValue: 0,
            type: DataTypes.INTEGER(10).UNSIGNED
        }
    }, {
        comment: 'designer tag table',
        freezeTableName: true,
        indexes: [{
            name: 'designer_tag_unique',
            method: 'BTREE',
            fields: ['designer_id', 'tag_id'],
            unique: true
        }],
        tableName: 'designer_tag',
        timestamps: false,
        underscored: true
    });
    DesignerTag.associate = models => {
        DesignerTag.belongsTo(models.Tag);
        DesignerTag.belongsTo(models.Designer);
    };
    return DesignerTag;
};

最后,表[designer_tag]如下所示:

CREATE TABLE `designer_tag` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT 'create_time',
  `designer_id` int unsigned DEFAULT NULL,
  `tag_id` int unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `designer_tag_unique` (`designer_id`,`tag_id`),
  KEY `tag_id` (`tag_id`),
  CONSTRAINT `designer_tag_ibfk_3` FOREIGN KEY (`designer_id`) REFERENCES `designer` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
  CONSTRAINT `designer_tag_ibfk_4` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='designer tag';

自动创建的密钥(tag_id)是不是很奇怪? Sequeize版本是5.21.10。 请有同样情况的人说说为什么会这样。 谢谢。

共有1个答案

华星驰
2023-03-14

难道这个代码不是自动创建外部字段tag_id吗??

 DesignerTag.associate = models => {
        DesignerTag.belongsTo(models.Tag);
        DesignerTag.belongsTo(models.Designer);
    };

所以逻辑上标记表和设计器表有多对多的关系。

 类似资料:
  • 我有一个app和两个MySQL数据库交互,其中一个是副本。当我需要执行事务时,我使用主数据库,当我需要访问一些历史数据或执行一些成本更高的选择时,我使用从数据库。 我尝试了以下操作: 在中,我配置了以下服务: 我将使用这两个上下文,如下所示: 我遇到以下异常: InvalidOperationException:尝试激活“StockApp.DataModels.MyMainDbContext”时,

  • 显然,在示例中,我将它们设置为字符串属性,但实际上它们是其他类型的。 注意:Object1和Object2实际上是从SOAP服务器所需的XML模型生成的类。所以我不能修改它们。 在我的代码中,我必须访问Object1或Object2的'name'属性,这取决于不同的因素。这个点是一个事件处理程序,所以在某一时刻,它捕获一个用Object1调用的事件,而在其他时间,它捕获一个用Object2调用的事

  • 我有这个方法,它在Dart 2中编译没有问题。但是,在运行时,我得到以下错误 输入

  • 本文向大家介绍Django 创建您的第一个模型,包括了Django 创建您的第一个模型的使用技巧和注意事项,需要的朋友参考一下 示例 通常在models.py应用程序子目录下的文件中定义模型。在Model类的django.db.models模块是一个很好的起点类来扩展你的模型。例如: 模型中的每个属性代表数据库中的一列。 title 是最大长度为100个字符的文本 author是ForeignKe

  • 问题内容: 据我了解,Flask应该创建一个线程并在其上运行第二个线程,但是我看到总是有两个进程在运行,而不是线程。即使是最简单的应用程序。 您可以看到两个进程正在运行: 这是怎么回事 问题答案: 这是因为您正在使用重新加载器运行开发服务器。重新加载程序监视文件系统中的更改,并以不同的过程启动真实应用程序,因此共有两个过程。 您可以通过点按或致电来禁用重新加载器。

  • 问题内容: 我注意到eclipse最近创建了一个.settings目录,其中包含1个文件,我想知道是否应该将此添加到版本控制中?SVN? 还有,这是新的吗?我已经使用eclipse已有相当长的一段时间了,但从未注意到它。 目录中文件的内容是这样的: 这些设置是否应该在工作区范围内而不是特定于项目? 问题答案: 此文件记录项目特定的设置与工作空间首选项。 我注意到该文件通常是在将常规Java项目转换

  • 我有50人,而这50个人在5个团队中(10人可能不在一个团队中)。我想在这50个人中生成7个小组,这样每个小组中没有两个人在同一个团队中。 这些组不必具有相同数量的人。 这些组可以有两个人在同一团队中,但必须积极地最小化 这些组的大小应大致相同 理想情况下,我想在python中解决这个问题,但我并不特别关心我用哪种语言实现它。

  • 首先,打开Android Studio并选择Create new Project,然后它会让你输入一个名字,你可以任意取一个名字,比如:Weather App。然后你需要输入公司域名。如果你不会真正发布这个app,这个字段就不是特别重要了,但是如果你有的话可以使用自己的域名。然后任意选择一个目录作为这个项目的保存地址。 下一步,它会让你选择最小的API版本。我们选择API 15,因为我们有一个库需