mysql - 将具有相同主键的两个表规范化为 3NF

标签 mysql sql-server database-design normalization database-normalization

我目前有两个主键相同的表,我可以让这两个表具有相同的主键吗?

所有的表都是第三范式

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 信用卡号码 信用卡问题 票证编号 * 地址

航类:

航类名称* PK 航类日期 Source_airport_id* FK Dest_airport_id* FK 来源 目的地 飞机编号*

机场:

Source_airport_id* PK Dest_airport_id* PK 来源_机场_国家 Dest_airport_country

飞行员:

飞行员姓名* PK 飞机编号* FK 飞行员级 月 飞行时间 评分

飞机:

Plane_id* PK 飞行员姓名* FK

最佳答案

这不是一个答案,但对于评论来说太长了......

不要听起来刺耳,但您的模型存在一些严重缺陷,您可能应该将其重新设计。

例如,考虑如果乘客购买第二张机票会发生什么。 Passenger 表不应该包含任何对门票的引用。也许一个乘客可以拥有不止一张信用卡?信用卡不应该在他们自己的 table 上吗?这同样适用于地址。

为什么 Airport 表包含真正关于目的地(或路径/行程)的信息?您已经在 Flights 表中记录了行程信息。在我看来,Airport 表应该包含与特定机场有关的信息(例如名称、位置?、IATA 代码等)。

Pilot 只能与一个 Plane 相关联吗?听起来不太可能。飞行员表不应包含有关飞机的信息。

并且 Planes 表不应该保存有关飞行员的信息,因为一架飞机肯定可以连接到多个飞行员。

等等...很可能还有其他问题,但这些指示应该能让您有所思考。

唯一对我来说看起来不错的表格是 Ticket 和 Flight。

关于mysql - 将具有相同主键的两个表规范化为 3NF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32017001/

相关文章:

asp.net - 嵌套重复器和 SqlDataSource 参数

Mysql 查询花费太多时间

mysql - 使用 Zend Framework 和 PDO Adapter 加载数据本地 Infile

sql - 如何在 SSMS 中备份或脚本化数据库的所有同义词?

sql-server - 将数据库转换为sql脚本的技术?

php - 如何将多个复选框结果存储到一个 mysql 表中

mysql - 在内连接上添加 where 子句

java - 从表中删除列表中不存在 id 的记录,保留现有记录并插入表中不存在的记录

php - 使用单个 ID 列引用多个表

sql - 如何实现一个 "Is Current"需求的一对多关系