Sql server 2008 过度工程化数据库设计

Sql server 2008 过度工程化数据库设计,sql-server-2008,database-design,relational-database,database-schema,Sql Server 2008,Database Design,Relational Database,Database Schema,我正在创建一个销售应用程序,并对产品和销售进行了初步设计,这要感谢这里的一些人的帮助:) 然而,我不确定我是否过度设计或者可以稍微简化我的设计 下面是我的产品订单模式 一些商业规则: 客户可以订购一份或多份合同 合同可以包含一个或多个产品 一个产品可以由一个或多个分销商提供 一个产品可以由一个或多个网络提供 分销商可以销售来自一个或多个网络的产品 产品价格可能因经销商而异 我的问题是: 我的设计是否设计过度?它使用链接表和创建3个版本的产品似乎非常复杂 网络产品 分销商产品 产品 我试图在

我正在创建一个销售应用程序,并对产品和销售进行了初步设计,这要感谢这里的一些人的帮助:)

然而,我不确定我是否过度设计或者可以稍微简化我的设计

下面是我的产品订单模式

一些商业规则:

  • 客户可以订购一份或多份合同
  • 合同可以包含一个或多个产品
  • 一个产品可以由一个或多个分销商提供
  • 一个产品可以由一个或多个网络提供
  • 分销商可以销售来自一个或多个网络的产品
  • 产品价格可能因经销商而异
  • 我的问题是:

  • 我的设计是否设计过度?它使用链接表和创建3个版本的产品似乎非常复杂

    • 网络产品
    • 分销商产品
    • 产品

    我试图在数据库中强制执行业务规则,例如,如果分销商不销售网络a,则网络a的产品不应可用。仅将产品分配给经销商是不够的,例如,网络a中的所有产品,然后查询经销商1是否销售网络a中的任何产品,但不销售网络b中的任何产品。这是一条严格的规则,我想阻止人们选择他们不应该选择的产品

  • 假设我无法调整架构,那么我的两个链接表NetworkPRoduct和DistributorNetwork是否最好保留一个在Distributor product中使用的复合主键,或者我可以如何使用代理键(如networkprodutid)来逃避?这是否仍然会强化分销商只销售某些网络的事实

  • 谢谢


    Rob

    当设计的复杂性超出了满足业务规则所需的成本时,设计就过于工程化了。没有人能比你更坚定这个决心。就我个人而言,我认为这是一个设计不足的项目

    您可能会遇到的问题是,在签订合同时,您可能不知道从哪个分销商购买产品。在我看来(我可能误解了这一点),你的模式假设你知道这一点。因此,您可能需要额外的产品表和分销商的真实价格矩阵


    如果您觉得当前的设计过于复杂,我应该向您展示如何建模,以及我们打算如何进一步建模。

    与您的问题并不相关,但我看到Distributor1表有两个电话号码列。这是否值得正常化到另一张桌子上?我只是想知道当有人要求第三方/第四方等时会发生什么:-)谢谢,我将删除所有联系人详细信息,因为它们不再需要。“我正在尝试在数据库中强制执行业务规则…”当您插入示例数据时,您的模式是否强制执行了所有这些规则?是的,按照预期执行业务规则直到出现相关错误。sql会有帮助吗?因为我要坐在这里的花生画廊里扔石头,这里有一个。。。为什么不直接使用已经存在的众多CRM系统中的任何一个呢?嗨,谢谢你的回复,在合同签订之前,我们确实知道经销商是谁。