MariaDB - 在两个实体之间创建多对多关系表[重复]

Posted

技术标签:

【中文标题】MariaDB - 在两个实体之间创建多对多关系表[重复]【英文标题】:MariaDB - Create many to many relationship table between two entities [duplicate] 【发布时间】:2019-10-23 03:44:50 【问题描述】:

我在 MariaDB 中创建多对多关系表时遇到问题。 我尝试过使用工作台、手动创建脚本和“显示创建表 xxxxxxx;”从另一个已经创建的 n 到 n 表但结果始终相同,以下错误:

Error Code: 1005. Can't create table `asi_234_api_establecimientos`.`oe_modalidad` (errno: 150 "Foreign key constraint is incorrectly formed")

我用来创建表格的代码:

CREATE TABLE `oe_modalidad` (
  `oferta_establecimiento_id` bigint(20) NOT NULL,
  `modalidad_id` bigint(20) NOT NULL,
  KEY `fk_oe_modalidades_oferta_establecimiento1_idx` (`oferta_establecimiento_id`),
  KEY `fk_oe_modalidad_modalidad1_idx` (`modalidad_id`),
  CONSTRAINT `fk_oe_modalidad_modalidad1` FOREIGN KEY (`modalidad_id`) REFERENCES `modalidad` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_oe_modalidades_oferta_establecimiento1` FOREIGN KEY (`oferta_establecimiento_id`) REFERENCES `oferta_establecimiento` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB

我尝试在两个不同版本的 MariaDB 10.0.38 和 5.5.60 中运行它,但我一直收到同样的错误。

【问题讨论】:

显示modalidadoferta_establecimiento 表的定义。 搜索你的错误信息,你会看到通常的原因。 您可能想阅读此清单以获取正确的外键:***.com/a/4673775/20860 抱歉信息不足。事实上,这两个键的类型不同。谢谢您的帮助。 @Barmar 不要在 many:many 表上使用 FK。如果有一个悬空的引用,这没什么大不了的。 【参考方案1】:

这是一个非常简短的例子:

create table Table1(
    id int auto_increment key,
    name varchar(50) not null
);

create table Table2(
    id int auto_increment key,
    name varchar(50) not null
);

create table Table3(
    idTable1 int not null,
    idTable2 int not null,
    primary key(idTable1, idTable2),
    CONSTRAINT fk_table3_table1 foreign key (idTable1) references Table1 (id),
    CONSTRAINT fk_table3_table2 foreign key (idTable2) references Table2 (id)
);

记住,Table1 和 Table2 的主键必须是 Table3 外键的同一类型。

【讨论】:

你能解释一下他做错了什么需要改正吗?一个工作示例并没有真正做到这一点。 我认为type不一样,但我不知道,因为他没有发布其他表。 这可能是真的,但在他澄清之前,我们无法真正回答。 非常感谢@Graiton,问题出在密钥类型上。一个是 bigint(20),另一个是 int。

以上是关于MariaDB - 在两个实体之间创建多对多关系表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mybatis11--多对多关联查询

在 Doctrine 中创建多对多关系的最佳实践。

建表原则

在关系数据库中对相同实体之间的多个多对多关系进行建模

实体框架多对多关系错误

如何在实体关系图中表示联结表?