Datawarehouse处理Bit数据类型

时间:2016-12-04 21:38:05

标签: sql sql-server data-warehouse

只是想知道人们在处理数据仓库环境中的位数据类型时的想法是什么?它会保留为Bit还是将数据类型转换为INT?处理位数据类型时,如果其0 = false且1为真,则存在哪些缺陷。

我正在使用SSIS,并且在转换为int时输出的问题看起来像-1。但它可以保持一点点吗?或者将其改为INT

是一种好习惯

3 个答案:

答案 0 :(得分:2)

通常,最好为您建模的内容使用适当的数据类型。如果某些事情只能是真或假,那么应该选择BIT。否则,您将失去一个非常自然的约束,只是不会让您的列中包含无效值。

here所示,可以克服BIT的SSIS问题。

此外,存储BIT可能更有效(必须使用至少一个字节来存储BIT列)。查看this article了解详情。

答案 1 :(得分:2)

就我个人而言,我已经在我的数据仓库中将很多位列转换为tinyint,并将一些列转换为smallint,以增加额外的灵活性/案例。

  • BIT允许3个案例(0 false 1 true和NULL unknown)
  • TINYINT允许256个案例(0-255和NULL)
  • SMALLINT允许最多65,537个案例(-32,768到32,767和NULL)

只要存储空间TINYINT实际上赢得了那个:

但所有这些都取决于实际使用情况以及谁将使用/报告。如果使用查找表等来消除数据仓库中的空值,我将-1 for unknown大小写并保留0 for none or not applicable (NA)。但我假设用户在使用多维数据集时不希望看到1 or 0而是YES or NO。但是,您的SQL专家可能宁愿看到BIT来理解您的意思YES or NO。对于SQL专家来说,一个额外的好处是能够添加整数,而不是必须首先转换位,这在进行一些按位操作时是很好的。

底线取决于你的桌子,你的结构,你的商业案例,在某些情况下,使用整数可能是合适的,而在其他情况下则坚持使用BIT

答案 2 :(得分:0)

我喜欢不可空的位字段,因为内容保证为true或false。换句话说,加载错误数据要困难得多。在我看来,填补这些领域所需的额外努力是我很乐意做出的权衡。

我还想将我的位字段与文本描述符合作。计算列可以防止不匹配和错误,同时为表示层提供对最终用户更有意义的值。真/假对某些人来说很有意义,但其他用户更好地理解打开/关闭,活动/休眠,开/关等等。