Bool字段作为唯一索引

时间:2012-09-17 06:46:13

标签: mysql sql database-design foreign-keys

Bool字段是否可以成为唯一索引,并与其他表的索引一起用于外键关系?

我不认为它可以成为主键但是唯一索引呢?每次我尝试将其转换为唯一索引时,都会将其转换为tinyint。

修改

所以我有一个SQL关系问题。假设我有一个数据库,我想保存有关个人的信息记录。现在我已经设置了一个表来接收这些信息。好的,到目前为止一切都很好。

通常情况下,可以在表中发现重复信息,并将其删除。如果特定字段与另一行中的另一个字段具有相同的值,则记录被视为重复。示例:重复的电子邮件。

现在我想在数据库中创建另一个表来跟踪发现和删除的每个重复项。我对此的第一个想法是创建一个外键关系。所以我创建了一个dupes表并将其连接到我的人员表。该关系是一个简单的外来键与主键的关系,具有删除约束。

现在虽然这可能起作用,但问题出现了,dupes表正在接收被删除的记录,即使它们没有被删除,因为它们是欺骗性的。这是一个问题,因为即使我决定仅仅因为我不喜欢他们而从人员表中删除一个人,他们也会存储在欺骗表中。

然后我想,为什么不在个人表中创建一个处置字段,并将其作为唯一或主键连接到我的dupes表的索引外键。那么问题是一个独特的键必须具有一个独特的值,所以多重配置的欺骗或我不喜欢你不会工作。另一种选择是使处置字段成为主键。这有同样的问题。

这个问题的正确关系是什么?

2 个答案:

答案 0 :(得分:4)

本质上,sql中的bool值(或mssql中的位)是一个非常短的整数。所以基本上没有理由不允许它作为外键。 但从设计的角度来看,它没有任何意义。

答案 1 :(得分:2)

是的,BOOL字段可以是主键或唯一键。如果是唯一键,则可以将NULL设置为值。

关于TINYINT:MySQL不支持BOOL数据类型,而是使用TINYINT。

来自引用 - BOOL,BOOLEAN:这些类型是TINYINT(1)的同义词。