sql-server - 使用位掩码存储不相关的位列

标签 sql-server database-design

我正在设计一张 table 。有几个互不相关的位列。

我正在考虑将这些列合并到一个通用的 ATTRIBUTES INT 位掩码列中。

现在,我试图说服自己这是个坏主意。这似乎是一种反模式。如果我以后需要另一个位列,它可能会节省我一些时间,但除此之外真的有任何好处吗?

如果我在位掩码上有一个索引,并且我正在按 ATTRIBUTES & 128 = 128 进行搜索,那么我怀疑它效率不高。索引将使所有内容按整体值而不是按位排序。所以,我想它实际上只需要扫描整个索引,而不是知道确切的去向。

听起来对吗?这是一个可怕的想法吗?

谢谢, 泰德兹

最佳答案

使用位掩码列使得

  • 代码更难阅读和维护
  • 无法使用索引

这也违反了数据库设计的正常形式。

您也不是在购买空间,因为 SQL Server 可以将多个位列压缩为一个字节。

但是,由于位列自然不是很有选择性,索引的使用在这里也可能没有优势。

总体而言,单个位列的好处明显超过位掩码列的好处。因此,几乎在所有情况下我都会使用单位列。

关于sql-server - 使用位掩码存储不相关的位列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849482/

相关文章:

sql - 如何将行拆分为列

Javascript 在错误后继续运行代码

mysql - 获取主键在范围内的行

mysql - mysql中房屋销售网站的数据库设计

sql-server - 如何在使用 sp_executesql 尝试安全通用存储过程时返回选择结果

sql-server - 将 varchar 转换为十进制在 SQL Server 上不起作用

sql-server - 使用 QUOTED_IDENTIFIER 克服 'ALTER INDEX failed' 错误

sql-server - 在数据库中存储标题以允许在没有前导 "The"、 "A"的情况下进行排序的最佳方法是什么

java - 何时在每个子类表上使用每个类层次结构表?

mysql - 应用产品属性