sql-server-2008 - 过度设计的数据库设计

标签 sql-server-2008 database-design relational-database database-schema

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

但是,我不确定我是否过度设计或可以略微简化我的设计。

下面是我的产品订单架构。

一些业务规则:

  1. 一个客户可以订购一份或多份契约(Contract)
  2. 一个契约(Contract)可以包含一个或多个产品
  3. 产品可由一个或多个分销商提供
  4. 一种产品可以由一个或多个网络供应
  5. 经销商可以从一个或多个网络销售产品
  6. 产品价格可能因分销商而异

enter image description here

我的问题:

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

    • 一个网络产品
    • 经销商产品
    • 产品

    我正在尝试在数据库中执行业务规则,例如,如果分销商不销售网络 a,则网络 a 的产品不应该可用。仅仅将产品分配给分销商是不够的,例如来自网络 a 的所有产品,然后只查询分销商 1 销售网络 a 但没有来自 b 的产品这是一个硬性规则,我想阻止人们选择他们不应该选择的产品?

  2. 假设我无法调整架构,我的 2 个链接表 NetworkPROduct 和 DistributorNetwork 最好留有一个在 Distributor 产品中使用的复合主键,或者我可以如何使用代理键(例如 networkprodutid)?这是否仍然表明分销商只销售某些网络?

谢谢

罗布

最佳答案

当复杂性成本超出满足您的业务规则所需的程度时,设计就会过度设计。没有人比你更能下定决心。我个人认为虽然它设计不足。

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

如果您当前的设计对您来说过于复杂,我应该向您展示如何we对此进行建模以及我们打算如何对其进行建模。

关于sql-server-2008 - 过度设计的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107223/

相关文章:

database-design - 代理键使插入变得复杂?

sql-server - 仅对非空列的唯一约束

SQL Server 2008 查找和替换 XML 列中的元素

python - 从 Python 调用时 SQL 存储过程未完成

mysql - 复制Mysql数据库的数据库结构

ruby - 关系型与 NoSql : Which database should I use for this kind of app?

sql-server - 调试 SQL Server 2008 中的存储过程

database - 表模块与领域模型

sql - 是否可以实现真正的一对一关系?

mysql - 无法通过多个连接获取正确的数据