Database 一个小型CRM/invoicing系统的数据库设计

Database 一个小型CRM/invoicing系统的数据库设计,database,database-design,crm,invoice,Database,Database Design,Crm,Invoice,我目前正在为我的客户开发一个小型客户关系和发票管理系统。我遇到了一些我想讨论的小问题 关于订单、客户和产品的最佳实践是什么。我的客户是否应该能够删除订单、客户和产品 目前,我已经围绕订单、客户和产品之间的关系原则设计了我的数据库,如下所示: 客户 身份证 名字 产品 身份证 名字 价格 订单 身份证 客户ID 订单日期 订单行 身份证 医嘱ID 产品ID 像这样,我可以连接所有不同的表。但是,如果我的客户删除了一个产品,当他后来打开几个月前创建的订单时会发生什么呢。它将消失,因为它已被删除

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

关于订单、客户和产品的最佳实践是什么。我的客户是否应该能够删除订单、客户和产品

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

客户
身份证
名字

产品
身份证
名字
价格

订单
身份证
客户ID
订单日期

订单行
身份证
医嘱ID
产品ID

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

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


如果我让我说每当我的客户决定删除某个产品时就将其禁用,那么如果他以后尝试添加与禁用产品具有相同产品ID的新产品,会发生什么情况,我是否应该再次启用该项目


请分享您的智慧:D

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


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

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

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

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

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

“如果我让我的客户在决定删除某个产品时说将其禁用,那么如果他以后尝试添加与禁用产品具有相同产品ID的新产品,会发生什么情况,我是否应该再次启用该项目?”

完全取决于您的业务场景-客户当前维护它的方式有哪些独特之处?(手动操作?)当先前停产的旧产品突然重新出现时,他们如何处理?(他们是将其视为新产品还是开始提及旧产品?)我想这些问题没有正确或错误的答案,这取决于功能——最好了解客户已经遵循的现有流程(不包括软件),然后将其映射到软件功能

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

“如果每当我的客户决定删除某个产品时,我就让他说diable该产品,那么如果他以后尝试添加与禁用产品具有相同产品ID的新产品,会发生什么情况,我是否应该再次启用该项目?”

完全取决于您的业务场景-客户当前维护它的方式有哪些独特之处?(手动操作?)当先前停产的旧产品突然重新出现时,他们如何处理?(是吗