-1

我目前正在为我的客户开发一个小型客户关系和发票管理系统。我遇到了一些我想讨论的小问题。

围绕订单、客户和产品的最佳实践是什么。我的客户应该能够删除订单、客户和产品吗?

目前,我围绕订单、客户和产品之间的关系原则设计了我的数据库,如下所示:

客户
ID
名称
...

产品
编号
名称
价格
...

订单
ID
CustomerID
OrderDate
...

订单行
ID
OrderID
ProductID

像这样我可以连接所有不同的表。但是,如果我的客户删除了一个产品,当他后来打开几个月前创建的包含该项目的订单时会发生什么。它会消失,因为它已被删除。客户也一样。

我应该在单击删除按钮时禁用产品和客户还是最佳做法是什么?

如果我在客户决定删除产品时说禁用产品,那么如果他稍后尝试添加与禁用产品具有相同产品 ID 的新产品,我应该再次启用该项目吗?

请分享你的智慧:D

4

3 回答 3

1

为什么您希望能够删除订单?我认为这样的系统会锁定订单,以便您知道自己有良好的历史记录。客户也一样,为什么要删除他们?也许是一种“归档”它们的方法,必须设置一些标志,这样它们就不会出现在客户列表或其他东西上。

至于禁用然后输入具有相同产品 ID 的新项目 - 我也不确定您为什么要这样做,每个产品 ID 都是唯一的,即使您停止使用产品,它也应该保留它的产品 ID所以你有记录。但是如果你必须,那么你可以在业务规则中设置一个约束,大意是“如果没有具有此产品 ID 的活跃产品,则允许它。如果我们有一个活跃的产品并且它具有相同的产品 ID,然后抛出错误。” 因此,您只允许一个具有该产品 ID 的活动产品 - 但老实说,我认为这会令人困惑,并且在后端,您将希望使用每个产品不变的唯一 ID 来链接表之间。

于 2010-10-03T19:31:52.443 回答
1

我会为 IsActive 添加一个布尔列,而不是“删除”。这样您就不会丢失历史数据。例如,如果他们能够删除客户,那么他们将无法查看有关该客户的历史记录,这可能会使查看统计数据变得困难或不可能。对于订单表,您可以有一个代表“当前”、“已取消”、“已填充”之类的列来完成相同的事情。该列应该是查找/代码表的代码。

于 2010-10-03T19:35:02.937 回答
1

“如果我在客户决定删除产品时说禁用产品,那么如果他稍后尝试添加与禁用产品具有相同产品 ID 的新产品,我应该再次启用该项目吗?”

完全取决于您的业务场景——客户目前维护它的方式有何独特之处?(说手动?)当一个早先停产的旧产品突然重新出现时,他们如何处理?(他们将其视为新产品还是开始引用旧产品?)我想这些问题没有正确或错误的答案,这取决于功能 - 始终建议了解现有流程(减去软件) 已经被客户关注,然后将它们映射到软件功能。

例如。您可以随时添加“具有此代码的产品已经存在 - 您要使用它而不是创建新产品吗?” 一种消息。此外,您在表格中用作外键的产品 ID 和用于向客户展示的产品 ID 最好有所不同——您不想混淆它们。

于 2010-10-03T19:41:11.707 回答