下表记录了关于电子商务书店的以下事实:姓名为EmpName、ID为EmpID的员工已在发货日期将订单(订单号为OrderNo)发送到地址ShipToAddr。装运的跟踪编号为TrackingNum。TrackingNum由提货的快递公司提供。这家书店只使用一家快递公司。请注意,一个订单可以根据订购项目的可用性分为多个装运。只有一名员工处理一批货物。但是,如果订单分多批发货,则多个员工可以处理订单。 装运 EmpID EmpName订单编号发货地址发货日期跟踪编号 1234 Joe 223 4615 Forbes Ave,Pittsburgh,PA 15147 1999年12月21日12435678 2134 Jones 224 4615 Forbes Ave,Pittsburgh,PA 15147 1999年12月25日21345678 1.列出主键。 2.列出所有FD。 3.列出所有更新异常,并提供每个异常的示例。 4.这种关系是什么范式?解释 5.逐步对其应用规范化,使关系达到3NF。也就是说,如果关系未规范化,则将其转换为第一范式,然后将您刚刚创建的第一范式转换为第二范式,再将第二范式转换为三范式。 对于到下一个更高正规形式X的每个变换, o解释将其转换为普通形式X所采取的步骤。 o提供普通形式X的表结构、主键和FD。 o解释为什么你认为它是正常形式X。 也就是说,如果关系是非规范形式的,那么您将解释您为将其转换为第一、第二和第三规范形式而执行的转换。您还将为第一种、第二种和第三种范式提供表结构、主键和FD。你还可以解释为什么你认为它是第一、第二和第三范式。
时间: 2024-04-01 11:34:08 浏览: 81
在Java 8中将List转换为Map对象方法
1. 主键为订单号(OrderNo)和跟踪编号(TrackingNum)。
2. EmpID -> EmpName, OrderNo -> ShipToAddr, OrderNo -> EmpID, TrackingNum -> OrderNo
3. 更新异常有两种情况:插入异常和删除异常。例如,如果一个员工处理多个订单,那么在删除这个员工的时候,会删除多个订单信息,而其中一些订单信息可能还有其他员工正在处理。另外,如果一个订单被拆分为多个装运,那么在更新这个订单的时候,可能会出现一部分装运信息被更新,而另一部分装运信息没有被更新的情况。
4. 这种关系是第一范式(1NF)。因为所有属性都是原子的,没有重复的属性或属性组。
5. 第一步,将关系转换为第一范式,每个属性都是原子的。关系模式如下:
装运(OrderNo,EmpID,ShipToAddr,ShippingDate,TrackingNum)
主键为OrderNo和TrackingNum。FD为EmpID -> EmpName, OrderNo -> ShipToAddr, OrderNo -> EmpID, TrackingNum -> OrderNo。
第二步,将关系转换为第二范式,消除非主属性对主键的部分函数依赖。由于OrderNo是主键,因此没有部分函数依赖。因此,关系已经符合第二范式。
第三步,将关系转换为第三范式,消除传递依赖。由于没有传递依赖,因此关系已经符合第三范式。
因此,最终的关系模式仍为:
装运(OrderNo,EmpID,ShipToAddr,ShippingDate,TrackingNum)
主键为OrderNo和TrackingNum。FD为EmpID -> EmpName, OrderNo -> ShipToAddr, OrderNo -> EmpID, TrackingNum -> OrderNo。
阅读全文