我正在设计一个需要成为五表数据库的SQL数据库,以满足Air-Crewe的要求。到目前为止,我有以下内容:
我在UNF有这个:
CrewID,船员类型,标题,姓氏,姓氏,性别,CAALicenceNum,FlightID,FlightNum,IATADep,IARAArr,日期,SchDep,SchArr,评论,A / CType,A / CReg,A / CManuf
我有1NF这个:
TBLCrew(CrewID [PrimaryKey],CrewType,CrewTitle,Forename,Surname,gender,CAALicenceNum,FlightID *)
TBLFlight(FlightID [PrimaryKey],FlightNumber,IATADep,IATAArr,日期,SchArr,评论,A / CType,A / CReg,A / CManuf)
我有2NF这个:
TBLCrew(CrewID [PrimaryKey],CrewType,CreweTitle,Forename,Surname,gender,CAALicenceNum)
TBLFlight(FlightID [PrimaryKey],FlightNum,IATADep,IATAArr,日期,SchArr,评论,A / CType,A / CReg,A / CManuf)
TBLCrewFlight(CreweID [composite / compoundKey],FlightID [composite / compoundKey])
需要将3NF分成五个表,但我不知道如何实现这一点 - 任何人都可以帮助我吗?或者纠正我,如果我在上面的规范化中犯了一个错误(我可能会告诉您正常化)
答案 0 :(得分:1)
接受的答案可以有更多的飞机用于飞行,我认为这不正确。
TBLCrew(CrewID[PrimaryKey], CrewType, CreweTitle, Forename, Surname, gender, CAALicenceNum)
TBLFlight(FlightNum[PrimaryKey], IATADep, IATAArr, Date, SchArr, A/CReg[composite/compoundKey])
TBLCrewFlight(CreweID[composite/compoundKey], FlightNum[composite/compoundKey], Comments)
Aircraft(A/CReg[PrimaryKey], A/CType[composite/compoundKey])
TBL_A/CType(A/CType[PrimaryKey], A/C Manuf)
答案 1 :(得分:0)
首先 - 我甚至不确定第一种形式。 Comments
意味着注释的多个实例,因此它可能不是原子的,我也会为它们创建一个表。它有三个属性 - comment_ID,comment,FlightID。
在第3种形式中,表的每个非素数属性都是非传递性的,取决于表的每个超级键。因此,在外行人的术语中,如果您在逻辑上识别依赖于另一个非键属性的属性,则需要将它们转换为另一个表。
如果性别取决于姓名是有争议的。其他分解有点困难,因为我没有列的描述(不完全确定它们代表什么)。
然而,我在这里提出一些我的猜测:
但是,您应该更好地了解各个列,因此您应该自己做出这些决定。这些例子可以帮助您理解第三种形式的概念。
答案 2 :(得分:0)
我认为你实际上几乎就在那里。我将飞机信息分成了自己的表格
Aircraft(CraftId[PimaryKey], A/CType, A/C Rep, A/C Manuf)
然后将飞机分配给航班
AircraftFlight(CraftId, FlightId) [Composite Key]