使用spring Boot 和mysql添加唯一检查,而不添加数据库级别的唯一约束

fgw7neuy  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(145)

我正在处理一个应用程序,需要维护一个“主题”实体。该实体包含以下字段- id、text和status(已删除/活动)。例如,如果我们谈论新闻,主题可以被理解为用于隔离新闻的广义标识符。为了发布一条新闻,它必须被分配一个主题。我正在使用软删除功能从数据库中删除一个主题。此外,我希望每个主题都是独一无二的。我在数据库级别上对表中的“text”属性使用唯一约束。
在这种情况下,一些出版商在他的主题列表中添加了一个主题,但后来删除了它。然后他又改变了主意,想把这个主题放在主题列表中。数据库级别上的唯一约束将限制用户添加该主题,即使该主题已被删除。解决此问题的一种方法是添加一个复合唯一约束-同时考虑“文本”和“状态”。这导致了另一种情况,如果用户想删除他再次添加的主题,他将无法删除。
有没有什么方法可以在文本上添加唯一性约束,而不需要在数据库级别添加任何唯一性约束?
P.S.我不想以任何代价执行硬删除。

mrphzbgm

mrphzbgm1#

如果我充分理解了“要求”,我推荐“历史-当前”模式。这涉及两个表:

  • History:每次发生的更改的仅追加历史记录。这对于“审计”等是有用的。每个项目可以有多行--初始插入;软删除;取消删除等。
  • Current:活动项的每项一行表。大部分查询只涉及这个表

有些行动需要触及两个表。

  • 今天的软删除将变成一个iNSERT INTO History加上一个DELETE FROM Current
  • 取消删除需要INSERT INTO current SELECT ... FROM History...加上INSERT INTO History

相关问题