T-SQL / MS SQL中的布尔和可空布尔使用注意事项

时间:2018-07-19 16:54:44

标签: sql-server database tsql nullable non-nullable

我的团队有一个数据库表,该表在多个应用程序之间共享。该表具有一个主键INT列,并且大多数列都是可空布尔值,用于for标志和配置。请注意,并非所有应用程序都在使用所有列,而是共享某些列。

表创建者提到她之所以选择这种方法,是因为随着以后引入新需求,表一直在增长。她也不希望数据库端确定默认值(因为引入的新列将被视为未知列),而是让每个应用程序决定如何处理所需列上的空值。这种方法永远不会有问题,因为该表始终由主键查询。

但是,我们的新团队成员最近以局外人的身份查看了数据表,而没有深入了解表的推理或上下文,并担心由于性能可能不佳而具有可空布尔值。他声称数据大小也将更大(在可预见的将来,该表最多不会超过5万行),并建议该列应为非空值,而应设置默认值。

这真的是个问题吗?

1 个答案:

答案 0 :(得分:2)

(此时间太长,无法发表评论) 有人说“空是邪恶的”。它继续说null就像医生一样,希望您不需要它,当您需要它时,您真的需要它。希望清楚地表明“空”不是没有思想就应该使用的东西。至于性能,这不会有可忽略的影响,因为您所谈论的仅仅是5万行,这是非常小的数据集。如果确定它不会在查询中引起任何问题,则可以让它们以这种方式存在,但请三思而后行,是否真的需要它们接受null?不能简单地将默认值设置为FALSE(0位)吗?使用bit数据类型,SQL Server在内部将多个布尔字段打包为一个整数以进行存储,并说1位或8位字段占用相同的空间。