处理 Bit 数据类型的数据仓库
Datawarehouse dealing with Bit datatype
只是想知道在数据仓库环境中处理位数据类型时人们的想法是什么?它会保留为 Bit 还是将数据类型转换为 INT?当 0 = false 和 1 为 true 时处理位数据类型时有什么陷阱。
我正在使用 SSIS,但在转换为 int 时输出看起来像 -1 时遇到问题。但它能保持原样吗?或者将其更改为 INT
是一种好习惯
通常,最好为您建模的内容使用适当的数据类型。如果某件事只能是真或假,那么 BIT
应该是选择。否则,您将失去一个非常自然的约束,该约束根本不允许您在列中包含无效值。
BIT 的 SSIS 问题可以解决,如图所示 here。
此外,存储 BIT 可能更有效(至少必须使用一个字节来存储 BIT 列)。查看 this article 了解更多详情。
就我个人而言,我已经在我的数据仓库中将很多位列转换为 tinyint
,将一些位列转换为 smallint
,以添加额外的 flexibility/cases.
BIT
允许 3 种情况(0 假 1 真和 NULL 未知)
TINYINT
允许 256 种情况(0-255 和 NULL)
SMALLINT
最多允许 65,537 个案例(-32,768 到 32,767 和 NULL)
就存储而言 space 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)
但这一切都取决于实际使用情况和谁会using/reporting。如果使用查找 tables 等来消除数据仓库中的空值,我将使用 -1 for unknown
大小写并保留 0 for none or not applicable (NA)
。但我假设用户在使用多维数据集时不想看到 1 or 0
,而是 YES or NO
。然而,您的 SQL 大师可能宁愿看到一个 BIT
来理解您的意思是 YES or NO
。 SQL guru 的一个额外好处是能够将整数相加,而不必先转换位,这在进行一些按位运算时很好。
底线将取决于您的 table、您的结构、您的业务案例,在某些情况下使用整数可能是合适的,而在其他情况下坚持使用 BIT
我喜欢不可为空的位字段,因为内容保证为真或假。换句话说,加载错误数据要困难得多。在我看来,填充字段所需的额外努力是我很乐意做出的权衡。
我还喜欢将我的位域与文本描述符结合起来。计算列可以防止不匹配和错误,同时为表示层提供对最终用户更有意义的值。 True/false 对某些人来说很有意义,但其他用户更好地理解 open/closed、active/dormant、on/off 等
只是想知道在数据仓库环境中处理位数据类型时人们的想法是什么?它会保留为 Bit 还是将数据类型转换为 INT?当 0 = false 和 1 为 true 时处理位数据类型时有什么陷阱。
我正在使用 SSIS,但在转换为 int 时输出看起来像 -1 时遇到问题。但它能保持原样吗?或者将其更改为 INT
是一种好习惯通常,最好为您建模的内容使用适当的数据类型。如果某件事只能是真或假,那么 BIT
应该是选择。否则,您将失去一个非常自然的约束,该约束根本不允许您在列中包含无效值。
BIT 的 SSIS 问题可以解决,如图所示 here。
此外,存储 BIT 可能更有效(至少必须使用一个字节来存储 BIT 列)。查看 this article 了解更多详情。
就我个人而言,我已经在我的数据仓库中将很多位列转换为 tinyint
,将一些位列转换为 smallint
,以添加额外的 flexibility/cases.
BIT
允许 3 种情况(0 假 1 真和 NULL 未知)TINYINT
允许 256 种情况(0-255 和 NULL)SMALLINT
最多允许 65,537 个案例(-32,768 到 32,767 和 NULL)
就存储而言 space 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)
但这一切都取决于实际使用情况和谁会using/reporting。如果使用查找 tables 等来消除数据仓库中的空值,我将使用 -1 for unknown
大小写并保留 0 for none or not applicable (NA)
。但我假设用户在使用多维数据集时不想看到 1 or 0
,而是 YES or NO
。然而,您的 SQL 大师可能宁愿看到一个 BIT
来理解您的意思是 YES or NO
。 SQL guru 的一个额外好处是能够将整数相加,而不必先转换位,这在进行一些按位运算时很好。
底线将取决于您的 table、您的结构、您的业务案例,在某些情况下使用整数可能是合适的,而在其他情况下坚持使用 BIT
我喜欢不可为空的位字段,因为内容保证为真或假。换句话说,加载错误数据要困难得多。在我看来,填充字段所需的额外努力是我很乐意做出的权衡。
我还喜欢将我的位域与文本描述符结合起来。计算列可以防止不匹配和错误,同时为表示层提供对最终用户更有意义的值。 True/false 对某些人来说很有意义,但其他用户更好地理解 open/closed、active/dormant、on/off 等