使用数据库,SQL:table "inheritance" 分离决定

Working with DBs, SQL: table "inheritance" separation decision

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

在这种情况下,car_owner person继承,即一个car-owner IS一个person . 我现在处于必须决定是否应该的地步:

  1. 创建 table car_owner,尽管它除了 person 中的列之外没有额外的列,尽管将来这可能会改变 => 这样做会导致 car_owner = table 列 (id,person_id),其中 person_idFKperson

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

我正在处理的 table 具有不同的名称和语义,并且可以在 (1)(2)[= 之间进行选择63=] 不清楚,因为在 car_owner 中需要额外的列可能永远不会弹出。

从概念上讲,(1) 似乎是正确的选择,但我想我想问的是是否有任何严重的问题我可能 运行稍后如果我改用 (2)

我建议选项 1 是更好的答案。虽然它为查询加入 table 创造了更多工作,但将 "optional" 数据放在它自己的 table 中会更整洁。如果需要更多类型的人(行人、car_driver、car_passenger),他们可以容纳更多 child table。您始终可以使用视图使它们看起来像一个 table。

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

回答有关选项 2 problems/consequences 的部分 - 好吧,none 太严肃了。这是一个数据库,所以你以后总是可以 re-arrange 事情,但是如果你重构 table ,重写查询和代码将付出代价。为什么我不喜欢选项 2 是因为它会导致额外的 table 而不是 re-using 人的部分。如果 table 看起来像 car_owners,我可能会为 car_passenger 制作一个全新的 table,并复制所有人员列。 简而言之,这两种方法都不会发生太悲惨的事情,由于不同的原因,它们都是可取的,缺点主要是不便和潜在的未来混乱。