首页 > 解决方案 > 当我有一个“IsDeleted”列类型的日期时间列时,我是否需要一个布尔列?

问题描述

假设我有一个名为的表Product,并且应该在逻辑上删除该表中的行。

表示表必须有一IsDeleted列。假设我想存储(逻辑上)删除行的日期和时间,因此,表必须有另一个(可为空)列,称为“ DeletedOn”。

我的问题是:在这种风格中,我是否需要有 ' IsDeleted' 列?当我有 ' DeletedOn' 列?(当' DeletedOn'列为空时,该行不被删除,当它不为空时,该行被删除。所以,我认为我们不需要' IsDeleted'列)

标签: sql-serverdatabasedatabase-design

解决方案


使用DeletedOn IS NULLorIsDeleted=0几乎会给您类似的性能,bit可能会有一个小的优势,如stackoverflow上的这个问题(索引布尔列与日期时间列的查询性能)中所解释的那样。但这不会那么重要。

如果有额外的bit列,您必须考虑通过触发器或通过计算列来维护完整性,这会导致代码更加复杂。

在这种风格中,我需要有“IsDeleted”列吗?当我有“DeletedOn”列时?

根据我的建议,如果您保持删除日期,则不需要额外的列。


推荐阅读