为什么在数据库中使用布尔标志不好?那应该用什么呢?

时间:2010-06-15 04:40:48

标签: mysql database database-design relational-database

我一直在阅读有关数据库优化和最佳实践的一些指南,其中很多建议在数据库架构中根本不使用布尔标志(ex http://forge.mysql.com/wiki/Top10SQLPerformanceTips)。然而,他们从来没有提供任何理由说明为什么这是坏事。这是性能问题吗?是否很难正确索引或查询?

此外,如果布尔标志不好,您应该使用什么来在数据库中存储布尔值?将布尔标志存储为整数并使用位掩码是否更好?这似乎不太可读。

4 个答案:

答案 0 :(得分:6)

我认为 不好,我也从未见过这样的理由。也许一些旧的数据库引擎无法有效地存储它们,但现代的却不行。正如你所说,使用布尔值比使用位掩码更具可读性。请参阅此问题以进行类似的讨论:Is adding a bit mask to all tables in a database useful?

答案 1 :(得分:5)

我能想到的唯一原因是你应该使用ENUM的情况。当然,你现在只想要真假,但如果你想在晚些时候添加其他东西,你需要做一个ALTER TABLE操作,这可能非常昂贵。

答案 2 :(得分:1)

我的猜测:你的设计的便携性。

e.g。

  1. Microsoft Access将布尔值视为 -1为true或0为false,而其他数据库可能处理boolean 不同。

  2. 在MySQL(版本4+)中 另一方面,零值被认为是假的。非零值被认为是真实的。

答案 3 :(得分:0)

授予数据库实践与理论无关,我仍然会尝试理论解释。表是有限的关系。每个关系都是谓词的扩展。布尔属性是谓词的误称。