2015-10-04 145 views
1

我正在设计一个需要满足Air-Crewe需求的五表数据库的SQL数据库。我有以下至今:规范化 - SQL - 3NF

我有这个联合国基金会的:

CrewID,船员类型,标题,名,姓,性别,CAALicenceNum,FLIGHTID,FlightNum,IATADep,IARAArr,日期,SchDep, SchArr,评论,A/CTYPE,A/CREG,A/CManuf

我有这种用于1NF:

TBLCrew(CrewID [PrimaryKey的],CrewType,CrewTitle,名,姓,性别,CAALicenceNum,FLIGHTID *)

TBLFlight(FLIGHTID [PrimaryKey的],FLIGHTNUMBER,IATADep,IATAArr,日期,SchArr,评论,A/CTYPE,A/CREG,A/CManuf)

我有这种用于2NF:

TBLCrew( TBLFlight(FlightID [PrimaryKey],FlightNum,IATadep,IATAArr,Date,SchArr,评论,A/CType,A/CReg,A/CReg,CrewType,CreweTitle,Forename,姓氏,性别,CAALicenceNum

CManuf)

TBLCrewFlight(CreweID [composite/compoundKey],FlightID [composite/compoundKey])

3NF需要分成五个表格,但我不知道如何实现这一点 - 任何人都可以请帮我吗?或纠正我,如果我在上面正常化犯了一个错误(我是新来的正常化或许你可以告诉)

enter image description here

+0

您可以为** A/CType **和** CrewType **实体创建另外2个表。 –

+0

由于飞行员可能是飞行员或副驾驶员,因此我可能会在TBLCrewFlight中为2NF添加机组类型和标题,如果有头航班助理,它也可能因航班而异。这在一定程度上取决于企业如何定义事物。 –

+0

感谢快速回复的家伙,我已经在上面列出了UNF表格,以便说明不同类型的单元格值,谢谢您花时间帮助我! –

回答

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) 
+0

这实际上是正确的。一次航班中不应该有多架飞机。根据“航班”的含义,这个答案比我的要好。 –

0

首先的 - 我不确定甚至一号形式。 Comments意味着评论的多个实例,因此它可能不是原子的,我也会为他们制作一个表格。它会有三个属性 - comment_ID,评论,FlightID。

在第三种形式中,该表的每个非主要属性都是非过渡依赖于该表的每个超级键。因此,按照外行的说法,如果您逻辑地确定依赖于另一个非关键属性的属性,则需要将它们转换为另一个表。

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

但是在这里,我提出我的一些猜测:

  • CrewTitle可能取决于性别 - 咣当新表
  • 出发地和目的地取决于航班号 - 咣当新表
  • 的A/C类型和制造商可能取决于A/C Reg - bam新表

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

0

我想你其实已经差不多了。我的飞机信息分割成它自己的表

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

,然后分配飞机飞行

AircraftFlight(CraftId, FlightId) [Composite Key]