小型CRM /发票系统的数据库设计

时间:2010-10-03 19:18:21

标签: database database-design crm invoice

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

订单,客户和产品的最佳实践是什么?我的客户能否删除订单,客户和产品?

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

客户
ID
名称
...

产品
ID
名称
价格
...

顺序
ID
客户ID
订购日期
...

订单行
ID
的OrderID
的ProductID

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

如果单击“删除”按钮或者最佳做法是什么,我应该禁用产品和客户吗?

如果我的客户决定删除产品时我会说产品,那么如果他后来尝试添加与产品ID相同的新产品作为禁用产品会发生什么情况呢,我应该再次启用该产品吗?

请分享你的智慧:D

3 个答案:

答案 0 :(得分:1)

为什么您希望能够删除订单?我认为这样的系统会锁定订单,以便您知道自己的历史很好。客户也一样,为什么删除它们呢?也许是一种“存档”它们的方法,必须设置一些标记,这样它们就不会显示在客户列表或其他内容上。

至于禁用然后输入具有相同产品ID的新商品 - 我不确定您为什么这样做,每个商品ID都是唯一的,因为即使您停止了产品,它也应该保留这是产品ID,所以你有一个记录。但是如果你必须,那么你可以在业务规则中设置一个约束,这就是“如果没有产品对这个产品ID有效,那么允许它。如果我们有一个活跃的产品,它有相同的产品ID,然后抛出错误。“因此,您只允许一个具有该产品ID的活动产品 - 但老实说,我认为这会让人感到困惑,而在后端,您将需要使用一个唯一的ID,该ID在每个产品之间不变,以便在表之间进行链接。 / p>

答案 1 :(得分:1)

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

答案 2 :(得分:1)

“如果我的客户决定删除产品时我会说产品,那么如果他后来尝试添加与残疾产品具有相同产品ID的新产品会发生什么,我应该再次启用该产品吗?”

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

例如。你总是可以添加一个'已经存在此代码的产品 - 你想使用它而不是创建一个新代码?'一种消息。此外,您在表中用作外键的产品ID,以及用于向客户展示的产品ID,最好是不同的 - 您不希望混淆它们。