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

Dav*_*nin 13 mysql database database-design relational-database

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

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

EMP*_*EMP 6

我不认为这糟糕,我也从未见过这样的理由.也许一些旧的数据库引擎无法有效地存储它们,但现代的却不行.正如你所说,使用布尔值比使用位掩码更具可读性.请参阅此问题以获得类似的讨论:向数据库中的所有表添加位掩码是否有用?


Bil*_*eal 5

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