我有一个表,其中还包含已删除的值和当前值,依赖于名为ghost的列。Ghost 1表示该行被删除,0表示该行是持久的。
id | name | ghost
1 | nam1 | 1
2 | nam1 | 1
3 | nam1 | 0我如何才能用理论来描述它,省略那些具有ghost =1的行进行唯一检查,而只检查那些具有ghost = 0的行?仅当ghost值为0时,名称才应是唯一的,否则应省略标记为ghost =1的行,因为已删除。
发布于 2020-11-28 17:46:27
该问题没有提供任何有关使用哪种数据库系统的信息。这可能会有一些帮助。
但是,不管底层数据库是什么,最简单的方法可能是在字段name和ghost上设置一个组合的唯一约束。
作为教义注解:
/**
* @Entity
* @Table(name="tablename",uniqueConstraints={@UniqueConstraint(name="unique_name_ghost", columns={"name", "ghost"})})
*/
class YourEntity
{
}或者在sql中:
ALTER TABLE your_table
ADD CONSTRAINT unique_name_ghost UNIQUE (name, ghost);然而,这有一个额外的隐含,即ghost = 1和name的组合在该表中也只能存在一次。您的问题没有清楚地说明是否需要具有多个具有相同名称的软删除行。
顺便说一句,软删除还有一个原则扩展:https://github.com/Atlantic18/DoctrineExtensions/blob/v2.4.x/doc/softdeleteable.md。您可能希望考虑使用该扩展名,而不是手动执行软删除。
https://stackoverflow.com/questions/65029811
复制相似问题