3NF正常化

时间:2012-05-19 23:56:32

标签: database database-design 3nf

我必须在3NF中规范化以下内容:

Service (Service_ID, Service Item, service item cost, date of service)  
Customer (customer ID, customer name, customer telephone number, customer address)  
Vehicle (Vehicle ID, vehicle make, vehicle model, vehicle year)  
Parts (Parts ID, part code, part describtion, part cost)

标准化后我得到了什么:

Service (Service_ID (PK), Service Item, service item cost, date of service, Vehicle_ID (FK))  
Customer (customer ID (PK), customer name, customer telephone number, customer address)  
Vehicle (Vehicle ID (PK), vehicle make, vehicle model, vehicle year, Customer_ID (FK))  
Parts (Parts ID (PK), part code, part describtion, part cost, Vehicle_ID (FK))

你认为我完全走错了轨道吗?

1 个答案:

答案 0 :(得分:3)

开始关系

  • 服务(Service_ID,服务项目,服务项目成本,服务日期)

结束关系

  • 服务(Service_ID(PK),服务项目,服务项目成本,服务日期,Vehicle_ID(FK))

标准化高达3NF可识别多种功能依赖关系,并通过投影消除麻烦的问题。 (通过创建另一种关系。)如果通过投影删除关系中的麻烦依赖关系,那么始终最终会使用比开始时更少的属性。

您的关系“服务”最终会以更多列开头。虽然记录服务所适用的车辆是有意义的,但这完全取决于您的开始,这与标准化无关。

识别丢失的外键虽然无可争议地是一件重要的事情,但它本身并不是规范化的一部分。从{Service_ID,服务项目,服务项目成本,服务日期,Vehicle_id,车辆制造,车辆型号,车辆年份}开始,标准化将表示Service_ID - > Vehicle_ID和Vehicle_ID - >车辆制造,车辆型号和车辆年份。这是一种传递依赖。要修复该传递依赖,

  • 将投射这四列,形成新的关系(您的车辆表),
  • 车辆制造,车辆型号和车辆年份将从起始关系移除,使其比开始时少3个属性。

服务关系中仍然存在车辆ID。

因此,您的老师已经为您提供了要求您进行规范化的作业。它需要您确定其他人搞砸了规范化并修复它的位置。这种赋值没有错,但是将它称为规范化有很多错误。 (IMHO)