起初,这个问题似乎微不足道,但是...
- 假设您的应用程序将关系数据库作为持久层进行管理。
- 假设(例如)应用程序管理学生、课程、教师、成绩、房间。
- 所有这些实体类型都以某种方式相互关联。
问题是,如何从持久层中删除实体,但保持关系完整性和逻辑一致性。
更具体地说:关于隐私的常规要求可能会迫使您从系统中删除参加过课程 B 的学生 A - 在 B 完成后。观察:
- 如果要删除学生 A,则也需要删除所有关系,以保持持久层的完整性。不幸的是,参加该课程的学生人数也减少了一位。事实上,我们希望 B 的服务员人数保持不变。
- 如果有人通过将名字和名字设置为@anonymous@ 来匿名学生 A,UNIQE(first name, name) 条件就会被破坏(有点人为,但你明白了)。
因此,我正在寻找理论上/实际上正确的解决方案来删除实体并将逻辑信息保留在数据库中。
注意:有相当大的应用程序从不删除记录。据我所知,SAP 就是这些应用程序之一。