规范化 - SQL - 3NF

时间:2015-10-04 14:06:27

标签: sql normalization

我正在设计一个需要成为五表数据库的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分成五个表,但我不知道如何实现这一点 - 任何人都可以帮助我吗?或者纠正我,如果我在上面的规范化中犯了一个错误(我可能会告诉您正常化)

enter image description here

3 个答案:

答案 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种形式中,表的每个非素数属性都是非传递性的,取决于表的每个超级键。因此,在外行人的术语中,如果您在逻辑上识别依赖于另一个非键属性的属性,则需要将它们转换为另一个表。

如果性别取决于姓名是有争议的。其他分解有点困难,因为我没有列的描述(不完全确定它们代表什么)。

然而,我在这里提出一些我的猜测:

  • CrewTitle可能取决于性别 - bam新表
  • 出发和到达取决于航班号 - bam新表
  • A / C类型和制造商可能依赖于A / C Reg - bam新表

但是,您应该更好地了解各个列,因此您应该自己做出这些决定。这些例子可以帮助您理解第三种形式的概念。

答案 2 :(得分:0)

我认为你实际上几乎就在那里。我将飞机信息分成了自己的表格

Aircraft(CraftId[PimaryKey], A/CType, A/C Rep, A/C Manuf)

然后将飞机分配给航班

AircraftFlight(CraftId, FlightId) [Composite Key]