【发布时间】:2012-09-17 15:38:12
【问题描述】:
Bool 字段能否成为唯一索引并与另一个表的索引一起用于外键关系?
我不认为它可以成为主键但是唯一索引呢?每次我尝试将其转换为唯一索引时,它都会将其转换为 tinyint。
编辑
所以我有一个 SQL 关系问题。假设我有一个数据库,我想在其中保存有关个人的信息记录。现在我已经设置了一个表格来获取这些信息。好的,到目前为止一切顺利。
通常可以在表中发现重复信息并将其删除。如果特定字段与另一行中的另一个字段具有相同的值,则记录被认为是重复的。示例:重复的电子邮件。
现在我想在数据库中创建另一个表来跟踪发现和删除的每个重复项。我的第一个想法是创建一个外键关系。所以我创建了一个 dupes 表并将其连接到我的 persons 表。该关系是一个简单的外键到主键的关系,带有一个删除约束。
虽然起初这可能有效,但出现的问题是,dupes 表正在接收已删除的记录,即使它们没有被删除,因为它们是骗子。这是一个问题,因为即使我决定从 person 表中删除一个人只是因为我不喜欢他们,他们还是会存储在 dupes 表中。
然后我想,为什么不在 person 表中创建一个 disposition 字段并将其作为唯一键或主键连接到我的 dupes 表的索引外键。那么问题是一个唯一的键必须有一个唯一的值,所以多次配置的欺骗或者我不喜欢你不会工作。另一种选择是使处置字段成为主键。不过这也有同样的问题。
解决这个问题的正确关系是什么?
【问题讨论】:
-
唯一索引的一部分,还是唯一索引?唯一索引布尔值将让您在表中有 2 行。 (3 如果它接受空值)
-
作为唯一索引。无论如何,当它们被删除并且在字段 foo 中也有一个错误值时,是否有将行汇集到另一个表中?
-
我不明白您的评论,仍然看不到您想要实现的目标。删除行与此有什么关系? foreign key constraint 可以限制删除,但是如何将任何数据移动(如果这就是您所说的“漏斗”)到另一个表?请澄清。
-
通过添加一个删除时,级联约束,它将使一个表上的已删除行通过外键转移到另一个与之有关系的表。
-
这似乎在 mssql 和 mysql 外键约束中都不正确,级联将删除命令级联到外键表 - 它们不会复制数据。 (如果我错了,请指向解释其他内容的 mysql 参考页面)。我认为你需要的是一个删除触发器——在那里你可以做任何你喜欢的事情。
标签: mysql sql database-design foreign-keys