Mysql 数据库设计优化

Mysql 数据库设计优化,mysql,database-design,Mysql,Database Design,这是一个家庭作业问题,因为它与我在数据库入门课程中遇到的一个问题有关,但不是问题本身。我正在学习Phillip Pratt的“MySql指南”,并且在第二章中遇到了一个问题。 问题是: 指出您所做的更改(使用速记表示法) 需要对Premiere产品数据库进行当前设计 以支持以下要求。客户不一定是 由单个销售代表表示,但可以由多个销售代表表示 销售代表当客户下订单时 订单上的佣金必须由销售代表收取 谁代表客户 数据库当前的设计如下(请注意,粗体字段是主键): 代表(Rep_Num、姓、名、街、市、

这是一个家庭作业问题,因为它与我在数据库入门课程中遇到的一个问题有关,但不是问题本身。我正在学习Phillip Pratt的“MySql指南”,并且在第二章中遇到了一个问题。 问题是:

指出您所做的更改(使用速记表示法) 需要对Premiere产品数据库进行当前设计 以支持以下要求。客户不一定是 由单个销售代表表示,但可以由多个销售代表表示 销售代表当客户下订单时 订单上的佣金必须由销售代表收取 谁代表客户

数据库当前的设计如下(请注意,粗体字段是主键):

代表(Rep_Num、姓、名、街、市、州、邮编、佣金、费率)

客户(客户编号,客户名称,街道,城市,州,邮政编码,余额,信用额度,代表编号)

订单(订单数量、订单日期、客户数量)

零件(零件编号,描述,现有,类别,仓库,价格)

订单行(订单数量零件数量,订单数量,报价)

我对该问题的解决方案是添加一个单独的表来表示,如下所示:

代表(Rep_Num、姓、名、街、市、州、邮编、佣金、费率)

客户(客户数量、客户名称、街道、城市、州、邮政编码、余额、信用额度)

表示(表示\u Id、客户数量、代表数量)

订单(订单数量,订单日期,表示订单Id)

零件(零件编号,描述,现有,类别,仓库,价格)

订单行(订单数量零件数量,订单数量,报价)


我想知道这是否是处理提议的问题的最有效的方法,我的解决方案是否有任何明显的缺陷?

问题的重点似乎是引入多列主键,而外键需要唯一的键来引用(在本例中,
Orders(Rep_Num,Customer_Num)references表示(代表编号、客户编号)
):

表示(代表数量、客户数量

订单(订单数量、订单日期、代表数量、客户数量)

诚然,您可以维护一个
表示Id
并在
订单中引用它

您的解决方案的缺陷在于,
订单(代表数量)
不一定会引用该特定客户的有效代表


从一个完全离题的角度来说,你的解决方案实际上是正确的:拿起电话的销售人员可以获得部分或全部佣金,而不管客户是否被分配给他


作为练习的一部分,将用例视为众多边缘案例中的一个,在这些案例中,理论和规范很快被现场的实际情况分解成碎片,在DB设计中务实和灵活会导致遵守规范。

这不是“优化”;它是问如何在当前模式下为新需求建模。我同意问题本身是问如何建模,但这不是我的问题。我已经实现了一个有效的模型,我只是想知道我的模型有多优化。对我来说很好。这当然是多个重复问题的经典解决方案,通常有一个好的解决方案为什么解决方案是经典的!@James Bender:您的模型在我看来很不错(不过我建议在命名上保持一致:要么
表示id
,要么
表示Num
,在
表示
订单
)。不确定这在您的任务中是否重要,但在现实世界中,
表示可以从
/
date\u到
属性…谢谢。我想到了几个解决方案(其中一个涉及数组),但我不确定哪一个是更“经典”的解决方案。