当前,我们有一个功能齐全的现有数据库和应用程序。我目前无法更改架构。今天,数据库中的每个表都有一个“ IsDeleted” NOT NULL BIT字段,默认值为“ 0”。当应用程序“删除”数据时,它只是将IsDeleted标志更新为1。
我无法理解的是每个表的索引应如何构造。现在,每个查询/联接/等总是执行IsDeleted检查。这是我们开发人员必须遵循的标准。话虽这么说,我试图确定是否需要更改每个表上的所有群集主键索引,以包括主键和IsDeleted BIT字段。另外,由于每个查询/加入/等。必须执行IsDeleted检查,是否适当地假设每个单索引(以及非聚簇索引)都应将IsDeleted字段包括为索引的第一个字段?
我还有一个问题是关于过滤索引的。我知道我可以在诸如“ WHERE IsDeleted = 0”之类的索引上放置过滤器,以减少索引的大小。但是,由于每个联接/查询都必须实现IsDeleted检查,这是否会阻止使用过滤后的索引(因为联接/查询中使用了IsDeleted列)?
请记住,我没有能力更改IsDeleted方法。
IsDeleted
列的普遍性和重要性,无论物理存储如何,都可以通过两个视图(可选地在不同的模式下)公开数据,从而解决参数化问题并在访问本不应该访问的数据时犯错误。访问的可能性较小。访问基本数据仅与极少数情况有关,在极少数情况下,需要以某种方式组合已删除和未删除的数据,以及实际上需要将行切换为“已删除”的情况。