【问题标题】:Related boolean columns -- separate columns or bitpacked into an integer column?相关的布尔列 - 单独的列或位打包成整数列?
【发布时间】:2010-05-26 18:19:28
【问题描述】:

您好,我有一个特定记录的数据库,它需要为一周中的每一天存储 1 或 0。那么哪一个会更好呢?将每个位移到一个整数中,并在数据库中只保留一个名为 days 的整数,还是应该将它们全部设为单独的布尔值以便拥有 sunday, monday, tuesday... 列?

请注意,这些列仅用于我们软件中的计算(而不是在数据库本身上),因此对这些值所做的唯一事情就是选择、更新和插入。

【问题讨论】:

    标签: sql database-design boolean


    【解决方案1】:

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

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

    • “哪个位又是星期天……?我是给它分配了最重要的位还是最不重要的位?” -- 您不会在使用单独的命名列时遇到此类问题...因此出现错误的可能性较小。

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

    • 我很确定今天的 RDBMS 足够智能,可以将多个布尔列打包在一起;

    【讨论】:

      【解决方案2】:

      单独的列。

      无论如何,数据库引擎都会打包它们并为您透明地使用这些位。我怀疑这比你或我自己滚动更好......

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 你能支持一下吗,或者你认为你可以比 MS 工程师做得更好?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2020-08-29
        • 2018-11-08
        相关资源
        最近更新 更多