【发布时间】:2013-12-03 14:49:23
【问题描述】:
我正在尝试了解如何规范化数据库,我们老师给出的练习之一是在 BCNF 中规范化此表:
Flight(**CityDeparture,CityArrival,Day**,NationDeparture,NationArrival)
其中 (CityDeparture,CityArrival,Day) 是主键。 所以我假设:
1)城市名独立于国家是唯一的(同一个城市不能有两个国家,即使现实中不是这样),否则主键会出错。
2) 功能依赖是 城市出发->国家出发 CityArrival->NationArrival 这意味着该表甚至不在 2NF 中,因此我将其分解如下: 航班(CityDeparture,CityArrival,Day) 没有非平庸的FD,所以它在BNCF,对吧?
CityD(**CityDeparture**,NationDeparture) CityDeparture->NationDeparture
在 BNCF 因为 CityDeparture 是关键
CityA(**CityArrival**,NationArrival) CityArrival->NationArrival
在 BNCF 中,因为 CityArrival 是关键。
我还考虑了这样一个事实,即 CityA 和 CityD 可能是相同的,除非每个城市都有不同的出发/到达代码(即,如果航班从那里起飞,纽约的代码为“AAA”,如果航班降落在那里,代码为“BBB” ) 所以一个人可能只有一个 City(Name,Nation) 表,CityDeparture,CityArrival 都会引用它。
分解也应该是无损的,因为 City.Name 是两个表的通用属性,并且是 City 的关键(我对此非常不确定)
当我把这本书展示给我的老师时,它只得了 0 分,并告诉我不用进一步解释就去读这本书。现在我确实读过这本书,我发现的文章链接在这里,但老实说我一无所知,所以我征求你的意见!任何帮助将不胜感激
【问题讨论】:
标签: database relational-database database-normalization