Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向数据库中的所有表添加位掩码有用吗?_Sql_Sql Server - Fatal编程技术网

Sql 向数据库中的所有表添加位掩码有用吗?

Sql 向数据库中的所有表添加位掩码有用吗?,sql,sql-server,Sql,Sql Server,一位同事正在为我们所有的数据库表添加位掩码。理论上,我们可以跟踪整个系统中每一行的某些属性。例如 行是随系统附带的还是在客户机开始使用系统后由客户机添加的 行是否已从表中删除(软删除) 行是一组行中的默认值吗 这是个好主意吗?这种方法是否还有其他有益的用途 我的偏好是,这些属性显然很重要,为每个属性设置一个专用列是合理的,这样可以让其他开发人员更清楚地了解正在发生的事情。不是真的,不是 你只能在里面储存一些,而且只能储存这么多。因此,在我看来,它要求在以后跟踪每一个应用程序的含义和潜在的滥用

一位同事正在为我们所有的数据库表添加位掩码。理论上,我们可以跟踪整个系统中每一行的某些属性。例如

  • 行是随系统附带的还是在客户机开始使用系统后由客户机添加的
  • 行是否已从表中删除(软删除)
  • 行是一组行中的默认值吗
这是个好主意吗?这种方法是否还有其他有益的用途

我的偏好是,这些属性显然很重要,为每个属性设置一个专用列是合理的,这样可以让其他开发人员更清楚地了解正在发生的事情。

不是真的,不是

你只能在里面储存一些,而且只能储存这么多。因此,在我看来,它要求在以后跟踪每一个应用程序的含义和潜在的滥用,因为“嘿,它们无处不在”。每个表上的每个位掩码对每个位都使用相同的定义吗?每张桌子上的菜会不一样吗?当您用完位时会发生什么?再加一个

你可以用它做很多潜在的事情,但它回避了这样一个问题:“为什么要这样做,而不是确定我们现在将使用这些位来做什么,并使它们成为正确的列?”你并没有真正避免模式改变的可能性,所以它似乎在试图解决一个你无法真正“解决”的问题,尤其是位掩码

您提到的每一件事都可以(而且应该)用数据库中的真实列来解决,而且这些列比“BitMaskOptions字段的第5位”更具自文档性。

专用列更好,因为它无疑更明显,更不容易出错。SQL Server,因此性能不是问题


我能看到的关于位掩码的唯一理由是,不必在每次添加新标志时都更改DB模式,但实际上,如果您添加新标志,那么通常会出现一些错误。

不,在我看来,这根本不是一个好主意。每一列都应该表示一个概念和值。位掩码有各种各样的性能和维护问题。新开发人员如何理解每个位的含义?如何防止有人意外地混淆了位的顺序的含义


最好使用多对多关系或单独的列,而不是位掩码。您将能够在其上建立索引、启用引用完整性(取决于方法)、轻松添加新项以及更改结果顺序以适应不同的报告等等

为了进一步说明这一点:位字段正在改变模式,只是在某种程度上DBM完全看不见,用户也几乎看不见。在这里添加回复没有意义,因为Evgeny已经很好地总结了它。对于位掩码,我能想到的唯一原因是,与单独的标志相比,可以节省存储空间,但在SQL Server中,8位列被压缩到一个字节中。你只是为了虚幻的利益而对这些字段的每一个查询都变得复杂。因此,向埃夫根尼强调+1。