1

假设我有一个数据库,其中一个实体(即表)从另一个实体继承,例如:

  • Table 1,命名person(name,surname)
  • Table 2, 命名car_owner

在这种情况下,car_owner 继承person,即 a car-owner ISa person。我现在必须决定是否应该:

  1. 创建表car_owner,即使它除了 in 之外没有额外的列person,尽管将来这可能会改变 => 这样做会导致car_owner= table with columns (id,person_id),在person_id哪里FKperson

或者

  1. 现在只留下person表格,只做(1) when/if关于 a 的额外信息car-owner将出现 => 请注意,如果我这样做,从其他表格FK到 a实际上将是s 到表格car-ownerFKperson

我正在处理的表具有不同的名称和语义,并且(1)(2)之间的选择不清楚,因为car_owner可能永远不会弹出对额外列的需求。

从概念上讲,(1)似乎是正确的选择,但我想我要问的是,如果我改用(2) ,我以后可能会遇到任何严重的问题

4

1 回答 1

2

我建议选项 1 是更好的答案。虽然它创建了更多的工作来连接表以进行查询,但将“可选”数据放在它自己的表中会更整洁。如果需要更多类型的人员(pedestrian、car_driver、car_passenger),他们可以容纳更多的子表。您始终可以使用视图使它们看起来像一张桌子。

顺便说一句,对于数据库,我们说 Parent 和 Child,而不是“inherets”。

回答关于选项 2 的问题/后果的部分 - 好吧,没有太严重。这是一个数据库,因此您以后可以随时重新安排内容,但是如果您重新构建表,则需要为重写查询和代码付出代价。为什么我不喜欢选项 2 是因为它可能导致额外的表格不重新使用人员部分。如果该表看起来像 car_owners,我可能会为 car_passengers 创建一个全新的表,其中包含所有 person 列的重复。简而言之,这两种方法都不应该发生太悲惨的事情,由于不同的原因,它们都是可取的,缺点主要是不便和潜在的未来混乱。

于 2015-04-13T22:41:51.293 回答