如果属性通常为空,我应该添加一列还是 1-1 表

Mit*_*hir 7 database-design sql-server

我们需要添加一个新的独特属性,它仅与特定子集(小于 1%)相关。我们认为最好添加一个 1-1 的新表,而不是添加一个 99% 的时间为 Null 的新列。

新表是首选方式吗?

Ken*_*her 8

如果以下条件之一为真,则是,继续创建一个单独的表。

  • 您使用的是 SQL 2005 或更低版本
  • 您的新列是以下数据类型之一:Geography、Geometry、Image、NText、Text、Timestamp 或用户定义的数据类型
  • 无默认值
  • 没有规则
  • 列不是计算列

如果这些都不是真的,那么你可以使用一SPARSE列。

ALTER TABLE tablename ADD mysparsecolumn INT SPARSE NULL
Run Code Online (Sandbox Code Playgroud)

这是SPARSE列上的 BOL 。你也可能想看看COLUMN SETS。稀疏列是针对 NULL 值优化的列,根据 BOL,当值为 NULL 时不占用空间。BOL 中有一些表格可以让您了解使用SPARSE列所产生的实际节省。

如果你想使用一个单独的表,你当然可以。不利的一面是,根据主键的大小,您将失去一些空间(您需要在新表中与额外列一起包含的最小值),并且由于额外的列而导致速度变慢是诽谤加入。