2009-06-05 82 views
1

假设您有一个ServiceCall数据库表,可记录所有对您进行的服务调用。每条记录都包含与客户记录的多对一关系,其中存储哪个客户进行了服务呼叫。实体删除策略

好吧,假设客户已经停止与您做生意,并且您不需要客户的数据库记录。创建新的ServiceCall记录时,不再需要客户的名称出现在下拉列表中。

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

您是否为该客户的记录设置了一个特殊列IsDeleted为true,然后确保所有下拉列表都不会加载所有IsDeleted设置为true的记录?虽然这样可以防止旧记录在内部连接中断,但它也会阻止用户添加与旧客户同名的新记录,不是吗?

你是否不允许删除?只是允许'禁用'它?

您使用过的其他策略?我猜测每个人都有自己的想法,我只需要看看你的意见。

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

回答

2

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

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

+0

嗨Tetraneutron, 感谢您的回答。 我给你一个'but',哈哈。 但是,如果系统的用户添加(有意或无意)具有相同名称的新客户。系统现在是不是有两个同名的客户,并且没有彼此链接(历史记录)。是的,内部CustomerID将使其在数据库中独一无二,但从用户的角度来看......嗯。 – Lasker 2009-06-05 04:35:48

0

我同意@ Tetraneutron的answer

另外,您可以创建一个仅列出活动客户的VIEW,以便更方便地填充下拉列表等。