当我有一个日期时间列作为“ IsDeleted”列的类型时,是否需要一个布尔列?

时间:2019-02-24 10:03:38

标签: sql-server database database-design

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

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

我的问题是:以这种方式,我需要填写“ IsDeleted”列吗?什么时候有“ DeletedOn”列? (当'DeletedOn列为null时,则不删除该行,而当它不为null时,则删除该行。因此,我认为我们不需要'IsDeleted'列)

1 个答案:

答案 0 :(得分:3)

使用DeletedOn IS NULLIsDeleted=0几乎可以提供与您类似的性能,bit可能有一个很小的优势,如本question (Performance of query on indexed Boolean column vs Datetime column)在stackoverflow上所述。但这不会那么重要。

如果增加了bit列,则必须考虑通过触发器或计算列来维护完整性,这将导致代码中的更多复杂化。

  

以这种样式,我是否需要具有“ IsDeleted”列?当我有   “ DeletedOn”列?

根据我的建议,如果要保留已删除的日期,则不需要多余的列。