假设您正在建立一个数据库来存储各种车辆的碰撞测试数据。您想要存储快艇、汽车和卡丁车的碰撞测试数据。
您可以创建三个单独的表:SpeedboatTests、CarTests 和 GokartTests。但是每个表中的很多列都是相同的(例如,执行测试的人员的员工 ID、碰撞方向(前、侧、后)等)。但是,很多列会有所不同,因此您不想将所有测试数据放在一个表中,因为您将有很多列对于快艇始终为空,还有很多列将始终为空对汽车来说是空的,而对于卡丁车来说,相当多的总是空的。
假设您还想存储一些与测试不直接相关的信息(例如被测试事物的设计者的员工 ID)。这些列似乎根本不适合放在“测试”表中,特别是因为它们将在同一辆车上的所有测试中重复。
让我说明一种可能的表格排列方式,以便您了解所涉及的问题。
快艇 编号 | col_about_speedboats_but_not_tests1 | col_about_speedboats_but_not_tests2 汽车 编号 | col_about_cars_but_not_tests1 | col_about_cars_but_not_tests2 卡丁车 编号 | col_about_gokarts_but_not_tests1 | col_about_gokarts_but_not_tests2 测试 编号 | 类型 | id_in_type | col_about_all_tests1 | col_about_all_tests2 (id_in_type 将引用接下来三个表之一的 id 列, 取决于类型的值) 快艇测试 编号 | speedboat_id | col_about_speedboat_tests1 | col_about_speedboat_tests2 汽车测试 编号 | 车牌号 | col_about_car_tests1 | col_about_car_tests2 卡丁车测试 编号 | gokart_id | col_about_gokart_tests1 | col_about_gokart_tests2
这种结构有什么好处/坏处,实现这样的东西的首选方式是什么?
如果还有一些适用于您希望在 Vehicles 表中拥有的所有车辆的信息怎么办?CarTests 表会看起来像......
编号 | 车辆编号 | ... 使用这样的 Vehicles 表: 编号 | 类型 | id_in_type (id_in_type 指向快艇、汽车或卡丁车的 ID)
看起来这只是一个皇家混乱。应该如何设置这样的东西?