database - 实体删除策略

标签 database entity-relationship

假设您有一个 ServiceCall 数据库表,它记录了对您进行的所有服务调用。每个记录都包含与客户记录的多对一关系,它存储哪个客户进行了服务调用。

好的,假设客户已停止与您开展业务,并且您不需要数据库中的客户记录。当您创建新的 ServiceCall 记录时,不再需要客户的姓名出现在下拉列表中。

你是做什么的? 您是否允许用户从数据库中删除客户的记录?

您是否为该客户的记录将一个特殊列 IsDeleted 设置为 true,然后确保所有下拉列表不会加载 IsDeleted 设置为 true 的所有记录?虽然这可以防止旧记录在 innerjoins 处被破坏,但也会阻止用户添加与旧客户同名的新记录,不是吗?

你完全不允许删除吗?只允许“禁用”它?

您还使用了其他策略吗?我猜每个人都有自己的方式,我只是想看看你的意见。

当然上面的比较简单,通常一个ServiceCall记录会链接到很多其他的实体表。所有这些在需要删除时都会面临同样的问题。

最佳答案

我更喜欢设置一个 IsDeleted 标志,其中一个好处是您仍然可以报告历史信息(所有数据仍然存在)。

至于无法插入另一个具有相同名称的客户的问题,如果您使用通常自动填充的 ID 列(例如 CustomerId),这不是问题。

关于database - 实体删除策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954244/

相关文章:

sql - UPDATE count=count+1 是否存在并发?

javascript - 我如何在 react native 应用程序中保留数据?

database - 是否有可能将两个弱实体相互联系起来?

database - 大多数表中的相同字段

mysql - 2 个外键引用 1 个主键

php - 请问laravel数据库事务锁表吗?

mysql - 编号状态的条件聚合

mysql - 使用 SUM 以便列中的 NULL 使总和为 NULL

objective-c - 如何创建一个 NSFetchRequest 来根据属性和关系过滤核心数据对象?

database - 这两种 ER 设计之间有什么区别吗?