我已经在这个墙上撞了几次头。因此,我希望在正确的方向上提供一些帮助。
我有一张ORDERS表,一张有TRAINS,一张有FLIGHTS,另一张有BUSES。每个订单都应该有单一的运输方式。到目前为止,我的设计包括ORDERS表格中的一个字段,说明了运输的类型(火车,飞行,公共汽车)以及包含所述运输类型的forreign钥匙的字段。
有没有更好的方法呢?
答案 0 :(得分:1)
我在这个主题中看到的最好的描述是在Craig Larman的书“应用UML和模式”中 - 虽然他是从面向对象而不是数据库的角度来写的。
关系世界有三种选择(这是基于拉曼的书):
每个选项都有优点和缺点 - 特别是在你事先不知道你需要哪种子类型的情况下,第一个选项是数据库端最简单,但是会造成一些混乱客户代码。
答案 1 :(得分:0)
如果所有项目都具有对象结构和子类型 - 超类型关系,则可以使用相同的父对象Id。不要像对待树模型那样对待它们。 This thread shows an example
如果您使用的是面向对象的建模,您也可以在数据库中使用面向对象的结构。因此,如果要扩展类,则还要扩展数据行,将它们连接到相同的ID号。这就是为什么我说“为超类型和子类型使用相同的id,因为你想加入超类型和子类型来创建一个子类型对象。