【发布时间】:2011-07-14 09:54:47
【问题描述】:
将行插入到相互引用 1 到 1 的表中的最佳方法是什么?
我的意思是,在 MySQL 5.5 和 InnoDB 表中,我有一个类似于以下的数据库设计
当我们尝试在 table1 和 table2 中插入行时,问题就出现了。由于 MySQL 中没有多表插入,所以我不能插入一行,因为两个表中的外键都是 NOT NULL 字段,应该同时插入两个表中。
解决这个问题的最佳方法是什么?
我想到了 3 种可能的解决方案,但我想知道是否有更多的解决方案,或者哪个是最好的以及为什么。
将外键字段设置为NULLABLE,在表中插入一行后,插入另一行,然后更新第一个。
如上所示,但具有特殊值,例如 -1。首先,插入一个具有外部
key = -1的表,这相当于NULL,但避免将该字段设置为NULLABLE。之后,我们在另一个表中插入该行并更新第一个插入的行。在两者之间创建一个关系表,尽管它并不是真正必要的,因为它是 1 比 1 的比率
谢谢!!
编辑 我简要解释一下我需要这种循环关系:它是从父表到其子表的非规范化。始终具有父表中排名最高的子项的参考是为了提高性能而制定的。
【问题讨论】:
-
我经常观察到这种关系是两个表应该在一个表中,或者只有一个表需要引用。
-
在这种情况下是不正确的。无论如何,¡谢谢!
-
@Emilio:您可能认为在这种情况下它是不正确的。但也许有办法改变这两张桌子的设计,所以没有这样的圆形路径。你能描述一下为什么需要这两种关系吗?这两张表是干什么用的?
-
@Emilio:这是一个常见的设计缺陷。如果两张表是
1:1关系,那你为什么不一张表呢? -
这是从父表到其子表的非规范化。始终从父表中获取排名最高的子项的参考是为了实现高性能。
标签: mysql database database-design insert relational-database