相关的布尔列 - 单独的列或bitpacked到整数列?

时间:2010-05-26 18:19:29

标签: sql database-design boolean

您好我有一个特定记录的数据库,它需要为一周中的每一天存储1或0。那么哪一个会更好?将每个位转换为一个整数并在数据库中只有一个名为days的整数,或者我们应该将它们全部分开布尔值,以便有sunday, monday, tuesday...列?

请注意,这些列仅用于我们软件中的计算(而不是用于DB本身),因此使用这些值的唯一方法是选择,更新和插入。

3 个答案:

答案 0 :(得分:2)

我会选择单独的列,原因如下:

  • 这似乎是设计得更好的数据库模型(因为更清晰,更直观,更易于理解),每个人都可能不需要任何进一步的解释;

  • “又是星期天的哪一位......?我给它分配了最重要的位,还是最不重要的位?” - 您不会遇到使用单独的命名列的问题......因此错误的可能性会降低。

  • 如果您以后想要增强数据库模型以便单日存储NULL,那么您几乎肯定每天都需要一个单独的列。否则,您每天至少需要两位(因为您现在有3种可能的状态,1位不再足够)以及适当的自制编码方案。

  • 我很确定今天的RDBMS非常聪明,可以将几个布尔列打包在一起;

答案 1 :(得分:2)

分隔列。

数据库引擎无论如何都会打包它们并为您透明地处理这些位。我怀疑它在这方面比你或我自己的更好......

答案 2 :(得分:0)

这取决于您的需求。使用bitshifting查询时,Sql Server的性能会降低。如果你每次查询只进行一天的大量过滤,那么我建议每天使用单独的位字段。