只是想知道人们在处理数据仓库环境中的位数据类型时的想法是什么?它会保留为Bit还是将数据类型转换为INT?处理位数据类型时,如果其0 = false且1为真,则存在哪些缺陷。
我正在使用SSIS,并且在转换为int时输出的问题看起来像-1。但它可以保持一点点吗?或者将其改为INT
是一种好习惯答案 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
实际上赢得了那个:
BIT
1个字节存储最多8列,然后2个字节,9到16列(https://msdn.microsoft.com/en-us/library/ms177603.aspx(TINYINT
1字节SMALLINT
2个字节(https://msdn.microsoft.com/en-us/library/ms187745.aspx)但所有这些都取决于实际使用情况以及谁将使用/报告。如果使用查找表等来消除数据仓库中的空值,我将-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。换句话说,加载错误数据要困难得多。在我看来,填补这些领域所需的额外努力是我很乐意做出的权衡。
我还想将我的位字段与文本描述符合作。计算列可以防止不匹配和错误,同时为表示层提供对最终用户更有意义的值。真/假对某些人来说很有意义,但其他用户更好地理解打开/关闭,活动/休眠,开/关等等。