关系数据库Table,数据重复风险?
Relational Database Table, data duplicity risk?
我正在尝试为一家包机公司创建一个假设的数据库,但我对我应该为员工创建多少 table 有点困惑...这里是一个基本介绍问题:
公司有很多员工,员工有机组人员和非机组人员,机组人员有飞行员、乘务员、飞行工程师和装卸员,非机组人员可以是经理、接待员等。并非所有员工都是船员。
所有船员都需要经常进行体检,并且需要保存这些检查的记录。所有船员还需要持有执照和证书,需要存储这些执照和证书的详细信息。
预订航班时,至少会为预订分配一名机组人员,具体取决于飞机类型和预订类型。所以如果它是一架小型飞机,那么一个飞行员就是唯一的机组人员。但是,如果是喷气式飞机,则两名飞行员和空乘人员组成机组人员。
现在我的问题是,我是否应该创建一个由船员和非船员组成的 table 全体员工,以及另外两个 table 用于 Licenses/Certifications 和体检? (将员工 table 与 licenses/certification 和体检 table 联系起来)
或
我是否应该为所有员工创建一个基本 table 并为船员创建一个单独的 table,仅将 licenses/certification 和体检 table 分配给船员成员table?这样就把船员和非船员分开了,所以船员和Medical and Certification table的关系就可以和整个员工table分开了。我担心这里的数据重复。
非常感谢!
"Should I" 是一个如果不充分了解您的模型以及您打算如何使用它就无法真正回答的问题。所以第一个问题是为什么您不简单地实现图中显示的模型?该图表明第一个选项是有意的。但是,从属 table 的 intent/usage 相当模糊。
- 并非所有船员都需要参加相同的测试并持有相同的证书。
- 只要您在 table 中看到 "flag" 列 (license_or_test),您的 IMO 就有问题。
- 根据图表,Crew 的主键与 Employee 相同。这也应该流经相关的 tables。
- 如果预订与特定客户相关联,则无需在 table 中包含 company_id。
- 如果客户对公司有 FK,为什么飞机没有?
- 您讨论了飞行,但在您的模式中没有任何内容可以表示它。也许这就是您所说的预订?请参阅下一项。
- 无论您的决定如何,都要保持一致。您为您的 table 使用复数名称 - 除了 crew。您也使用术语船员。航班与预订。等等
我还要补充一点,您过于简化了依赖于航班的模式。对于给定的航班,您将拥有一个由特定成员组成的 "crew"。通常这将由多名员工(飞行员、副驾驶等)组成。由于涉及许可问题,飞行员可以在航班上担任副驾驶。我不明白为什么 Employee_ID 在 Bookings 中 - 但也许你打算在那里使用不同的用法。
我建议你选择一种方法,看看它能把你带到哪里。或者两者都做。您将通过联合使用表示同一模型的不同模式来了解更多信息。
我正在尝试为一家包机公司创建一个假设的数据库,但我对我应该为员工创建多少 table 有点困惑...这里是一个基本介绍问题:
公司有很多员工,员工有机组人员和非机组人员,机组人员有飞行员、乘务员、飞行工程师和装卸员,非机组人员可以是经理、接待员等。并非所有员工都是船员。
所有船员都需要经常进行体检,并且需要保存这些检查的记录。所有船员还需要持有执照和证书,需要存储这些执照和证书的详细信息。
预订航班时,至少会为预订分配一名机组人员,具体取决于飞机类型和预订类型。所以如果它是一架小型飞机,那么一个飞行员就是唯一的机组人员。但是,如果是喷气式飞机,则两名飞行员和空乘人员组成机组人员。
现在我的问题是,我是否应该创建一个由船员和非船员组成的 table 全体员工,以及另外两个 table 用于 Licenses/Certifications 和体检? (将员工 table 与 licenses/certification 和体检 table 联系起来)
或
我是否应该为所有员工创建一个基本 table 并为船员创建一个单独的 table,仅将 licenses/certification 和体检 table 分配给船员成员table?这样就把船员和非船员分开了,所以船员和Medical and Certification table的关系就可以和整个员工table分开了。我担心这里的数据重复。
非常感谢!
"Should I" 是一个如果不充分了解您的模型以及您打算如何使用它就无法真正回答的问题。所以第一个问题是为什么您不简单地实现图中显示的模型?该图表明第一个选项是有意的。但是,从属 table 的 intent/usage 相当模糊。
- 并非所有船员都需要参加相同的测试并持有相同的证书。
- 只要您在 table 中看到 "flag" 列 (license_or_test),您的 IMO 就有问题。
- 根据图表,Crew 的主键与 Employee 相同。这也应该流经相关的 tables。
- 如果预订与特定客户相关联,则无需在 table 中包含 company_id。
- 如果客户对公司有 FK,为什么飞机没有?
- 您讨论了飞行,但在您的模式中没有任何内容可以表示它。也许这就是您所说的预订?请参阅下一项。
- 无论您的决定如何,都要保持一致。您为您的 table 使用复数名称 - 除了 crew。您也使用术语船员。航班与预订。等等
我还要补充一点,您过于简化了依赖于航班的模式。对于给定的航班,您将拥有一个由特定成员组成的 "crew"。通常这将由多名员工(飞行员、副驾驶等)组成。由于涉及许可问题,飞行员可以在航班上担任副驾驶。我不明白为什么 Employee_ID 在 Bookings 中 - 但也许你打算在那里使用不同的用法。
我建议你选择一种方法,看看它能把你带到哪里。或者两者都做。您将通过联合使用表示同一模型的不同模式来了解更多信息。