0

我有两个表格当前具有相同的主键,我可以让这两个表具有相同的主键吗?将具有相同主键的两个表规格化为3NF

也都在第三范式

Ticket:     
------------------- 
Ticket_id* PK 
Flight_name* FK 
Names* 
Price 
Tax 
Number_bags 

Travel class: 
------------------- 
Ticket id * PK 
Customer_5star 
Customer_normal 
Customer_2star 
Airmiles 
Lounge_discount 
ticket_economy 
ticket_business 
ticket_first 
food allowance 
drink allowance 

在数据库中的表的其余部分中的所有表都低于

乘客:

名称* PK Credit_card_number Credit_card_issue TICKET_ID * 地址

航班:

Flight_name * PK FLIGHT_DATE Source_airport_id * FK Dest_airport_id * FK 来源 目标 Plane_id *

机场:

Source_airport_id * PK Dest_airport_id * PK Source_airport_country Dest_airport_country

飞行员:

Pilot_name * PK 平面标识* FK Pilot_grade 月 飞行小时 率

飞机:

Plane_id * PK Pilot_name * FK

+1

如果你真的想把它变成一个3NF的问题,你需要在你的问题中定义你的模式。此外,表格名称并不清晰 – Drew

+2

表格代表什么?他们有关系吗?数据是什么样的?从列名看来,你似乎需要在3NF中引入大量表格。请在问题中添加更多信息 - 目前看起来可能无法给您任何有意义的答案。 – jpw

回答

0

有两个表使用相同的密钥去反对在正常化中消除冗余的想法。

除此之外,这些表格在1NF和2NF?

根据Names字段判断,我建议table1不是。如果多个名称可以属于一张票,那么您需要一张新表,最有可能使用组合键ticket_id,name

+3

据我们所知,他可能还需要12张桌子 – Drew

+0

我德文郡,一张票连接到一个名字,所以票12例如只有一个人 –

2

这并不意味着作为一个答案,但它变得太长评论...

不健全的苛刻,但你的模型有一些严重的缺陷,你应该把它回到绘图板。

考虑如果乘客购买第二张票时会发生什么情况。乘客表不应该持有任何票据的参考。也许一个乘客可以拥有多个信用卡?信用卡不应该放在自己的桌子上吗?这同样适用于地址。

机场表为什么会保存真正关于目的地(或路径/旅程)的信息?您已经在Flights表中记录了行程信息。在我看来,机场表应该拥有与特定机场有关的信息(如姓名,地点?,国际航空运输协会代码等等)。

飞行员能与一个单一的飞机相关吗?听起来不太可能。飞行员表不应该保存有关飞机的信息。

飞机表不应该持有飞行员的信息,因为飞机肯定可以连接到多个飞行员。

等等......还有很多其他问题,但这些指针应该给你一些想法。

对我来说,这种看起来不错的表格是Ticket and Flight。

1

重新相同的主键:

具有相同主键是可以有多个表。原则上和良好的做法。我们声明一个主要的或其他唯一的列,说这些列(和它们的超集)在表中是唯一的。如果是这种情况,请声明这样的列集。这事儿常常发生。例如:典型的合理情况是“子类型”/“子表”,其中由一个表的候选键标识的类型的实体总是或有时也是由另一个表中的相同值标识的类型。 (如果总是那么一个表的候选键值也在另一个表中,那么我们将声明一个外键到另一个表,我们可以说一个表的类型实体是另一个表的一个子类型)。另一方面有时一个表使用两种属性,一种属性不适用于一种不使用。 (即通过空或标签指示种类)。

是否你应该有相同的主键的情况取决于良好的设计适用于您的特定情况的其他标准。你需要学习包括规范化在内的设计。例如:所有简单键和3NF意味着5NF,所以如果你的两个表具有相同的一组值,只有在每个状态下只有&简单主键,并且它们都在3NF中,那么它们的连接包含与它们完全相同的信息分开做。不过,也许你会为了设计的清晰度,改变的可能性或基于使用的性能而将它们分开。你没有提供这些信息。

回复正常形式:

正常形式适用于表。表的最高标准形式是独立于任何其他表的属性。 (虽然你可能会根据&表格的种类来选择表格)

为了规格化或确定表格的最高标准形式,需要知道(通常)所有函数依赖关系。 (对于BCNF上面的正常形式,也加入依赖关系。)你没有给他们。它们由表格的含义决定(即,如何确定在特定情况下哪些行进入)以及可能出现的情况。你没有给他们。我们可以告诉你关于表格所处的正常表格而不提供这些信息的期望表明你不了解标准化并需要对此进行教育。

正确的设计也需要这些信息以及一般情况下可能出现的所有有效状态。即给定表格之间的约束。你没有给他们。

相关问题