【发布时间】:2010-10-07 23:01:10
【问题描述】:
假设您要建立一个数据库来存储各种车辆的碰撞测试数据。您想要存储快艇、汽车和卡丁车的碰撞测试数据。
您可以创建三个单独的表: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)这看起来简直是一团糟。应该如何设置这样的东西?
【问题讨论】:
标签: database-design polymorphic-associations class-table-inheritance