Mysql 在RDBMS中标记已删除条目的更好方法

Mysql 在RDBMS中标记已删除条目的更好方法,mysql,postgresql,database-design,Mysql,Postgresql,Database Design,即使用户从前端删除某些实体,我也必须在我的RDBMS中保留实体的记录。假设我有一个用户表,其中每个用户都有一封唯一的电子邮件。现在假设名为name1的用户有一封电子邮件email1。现在,用户记录已从前端删除,有人试图创建一个具有name2和电子邮件email1的用户。这将违反email列上的唯一约束,但我仍然必须在该表中保留该记录,因此我的表中有一个名为status的列,其默认值为1。现在我对电子邮件和状态有一个独特的限制。每当有人删除一个用户时,我将状态增加1。但是,如果一个带有emaile

即使用户从前端删除某些实体,我也必须在我的RDBMS中保留实体的记录。假设我有一个用户表,其中每个用户都有一封唯一的电子邮件。现在假设名为
name1
的用户有一封电子邮件
email1
。现在,用户记录已从前端删除,有人试图创建一个具有
name2
和电子邮件
email1
的用户。这将违反
email
列上的唯一约束,但我仍然必须在该表中保留该记录,因此我的表中有一个名为
status
的列,其默认值为
1
。现在我对
电子邮件
状态
有一个独特的限制。每当有人删除一个用户时,我将状态增加1。但是,如果一个带有email
email1
的用户记录被删除两次,则会出现问题。在这种情况下,我将有2条状态为
2
的用户记录。
所以这个方法失败了。另一种方法是将已删除的记录移动到另一个没有任何约束的表中。但是使用这种方法,我需要为每个表创建一个额外的表,以便跟踪删除的条目。所以我觉得这很愚蠢。是否有其他方法可以解决此问题?

我建议使用时间戳列而不是数字来存储已删除状态,因为时间信息通常也是必需的。它被称为时态模型,通常使用两个时间戳来定义有效性间隔。锚模型使用特殊的概念扩展了该模型:锚、层、节点、属性
实际上,所有时态模型在常规的RDBMS实现中都存在许多问题,SQL 2012中解决了这个问题,但在同一时间并未广泛实现,RDBMS供应商提供了非常不同的解决方案,即更改数据捕获或闪回

在访问电子邮件的应用程序中检查状态=1,然后考虑它deleted@xrcwrn是的,我能做到,但为此我必须阅读。我不想进行读取,只想使用唯一约束。SQL标准最新版本的官方正确名称是“SQL:2011”,而不是“SQL 2012”。