3

我知道在 MySQL 中,UNIQUE 约束不会将 NULL 值视为相等。因此,如果我对 ColumnX 有一个唯一约束,那么两个单独的行对于 ColumnX 可以具有 NULL 值,这不会违反约束。我该如何解决这个问题?我不能只是将值设置为我可以标记的任意常量,因为在我的情况下 ColumnX 实际上是另一个表的外键。我在这里有什么选择?

请注意,该表还有一个“id”列作为其主键。由于我使用的是 Ruby on Rails,因此将此 id 列保持为主键很重要。

注意2:实际上,我的唯一键包含许多列,其中一些必须为空,因为它们是外键,并且其中只有一个应该是非空的。我实际上想要做的是“模拟”多态关系,以保持数据库中的引用完整性,但使用在接受的解决方案中的第一个选项中概述的技术来解决这里提出的问题:为什么你不能拥有多态关联中的外键?

4

1 回答 1

1

如果只有一个外键可以是非空的,那么重组表可能会更好。与其colA | colB | colC使用一个 FK 和两个 NULL,不如使用fkType | fkId.

fkType将是一个带有选项的枚举,A,B,C对应于您的外部表。fkId将是外部表中的 ID。现在您可以在 上设置唯一性约束(fkType,fkId)

所以以前你可能有:

1    | NULL | NULL
NULL | 3    | NULL

现在您将拥有:

A | 1
B | 3
于 2010-03-23T15:32:32.260 回答