首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计优化

数据库设计优化
EN

Stack Overflow用户
提问于 2013-06-15 20:32:55
回答 1查看 3.8K关注 0票数 0

这是一个家庭作业问题,因为它与我的入门数据库课程中的一个问题有关,但不是问题本身。我正在学习菲利普普拉特的“MySql指南”,在第二章中我被困在了一个问题上。问题是:

指出您需要对Premiere产品数据库进行当前设计以支持以下要求的更改(使用速记表示)。客户不一定由单个销售代表代表,但可以由多个销售代表来表示。当客户下订单时,获得订单佣金的销售代表必须在代表客户的销售代表的集合中。

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

代表(Rep_Num,Last_Name,First_Name,Street,City,State,Zip,Commission,Rate) 客户(Customer_Num,Customer_Name,街道,城市,州,Zip,Balance,Credit_Limit,Rep_Num) 命令(Order_Num,Order_Date,Customer_Num) Part(Part_Num,描述,On_Hand,类,仓库,价格) Order_Line (Order_NumPart_Num,Num_Ordered,Quoted_Price)

我对这个问题的解决办法是为表示添加一个单独的表如下:

代表(Rep_Num,Last_Name,First_Name,Street,City,State,Zip,Commission,Rate) 客户(Customer_Num,Customer_Name,街道,城市,州,邮编,平衡,Credit_Limit) Represents(Represents_Id,Customer_Num,Rep_Num) 命令(Order_Num,Order_Date,Represents_Id) 零件(Part_Num,Description,On_Hand,Class,Warehouse,Price) Order_Line (Order_NumPart_Num,Num_Ordered,Quoted_Price)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 22:55:53

问题的重点似乎是引入多列主键,并且外键需要一个唯一的键来引用(在本例中是Orders (Rep_Num, Customer_num) references Represents (Rep_Num, Customer_num)):

表示(Rep_Num,Customer_Num) 命令(Order_Num,Order_Date,Rep_Num,Customer_Num)

当然,您可以维护一个Represents_Id,并在Orders中引用它。

您的解决方案的缺陷是,Orders (Represents_Num)不一定引用特定客户的有效代表。

在一个完全不相关的话题上,你的解决方案实际上是正确的:无论客户是否被分配给他,拿起电话的销售人员都会得到部分或全部佣金。

从这个练习中可以看出,用例是许多边缘案例中的一个,在这些案例中,理论和规范很快被领域的现实所粉碎,而DB设计中的实用主义和灵活性胜过了对规范的坚持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17127642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档