我一直在阅读有关数据库优化和最佳实践的一些指南,其中很多建议在数据库架构中根本不使用布尔标志(ex http://forge.mysql.com/wiki/Top10SQLPerformanceTips)。然而,他们从来没有提供任何理由说明为什么这是坏事。这是性能问题吗?是否很难正确索引或查询?
此外,如果布尔标志不好,您应该使用什么来在数据库中存储布尔值?将布尔标志存储为整数并使用位掩码是否更好?这似乎不太可读。
答案 0 :(得分:6)
我认为 不好,我也从未见过这样的理由。也许一些旧的数据库引擎无法有效地存储它们,但现代的却不行。正如你所说,使用布尔值比使用位掩码更具可读性。请参阅此问题以进行类似的讨论:Is adding a bit mask to all tables in a database useful?
答案 1 :(得分:5)
我能想到的唯一原因是你应该使用ENUM的情况。当然,你现在只想要真假,但如果你想在晚些时候添加其他东西,你需要做一个ALTER TABLE操作,这可能非常昂贵。
答案 2 :(得分:1)
我的猜测:你的设计的便携性。
e.g。
Microsoft Access将布尔值视为 -1为true或0为false,而其他数据库可能处理boolean 不同。
在MySQL(版本4+)中 另一方面,零值被认为是假的。非零值被认为是真实的。
答案 3 :(得分:0)
授予数据库实践与理论无关,我仍然会尝试理论解释。表是有限的关系。每个关系都是谓词的扩展。布尔属性是谓词的误称。