假设您有一个 ServiceCall 数据库表,它记录了对您进行的所有服务调用。每个记录都包含与客户记录的多对一关系,它存储哪个客户进行了服务调用。
好的,假设客户已停止与您开展业务,并且您不需要数据库中的客户记录。当您创建新的 ServiceCall 记录时,不再需要客户的姓名出现在下拉列表中。
你是做什么的? 您是否允许用户从数据库中删除客户的记录?
您是否为该客户的记录将一个特殊列 IsDeleted 设置为 true,然后确保所有下拉列表不会加载 IsDeleted 设置为 true 的所有记录?虽然这可以防止旧记录在 innerjoins 处被破坏,但也会阻止用户添加与旧客户同名的新记录,不是吗?
你完全不允许删除吗?只允许“禁用”它?
您还使用了其他策略吗?我猜每个人都有自己的方式,我只是想看看你的意见。
当然上面的比较简单,通常一个ServiceCall记录会链接到很多其他的实体表。所有这些在需要删除时都会面临同样的问题。
最佳答案
我更喜欢设置一个 IsDeleted 标志,其中一个好处是您仍然可以报告历史信息(所有数据仍然存在)。
至于无法插入另一个具有相同名称的客户的问题,如果您使用通常自动填充的 ID 列(例如 CustomerId),这不是问题。
关于database - 实体删除策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954244/