使用单列的 sub-table 继承

Inheritence using sub-table with a single column

对于我的数据,使用 Table-Per-Type 模式将导致 'subclass' tables 只有一列(父 table 的主键).

由于在子 table 中没有自动递增主键,我可以在进行读取连接时跳过 table,但在其他 table 中仍然具有强类型插入有异地恋。

我的情况有点复杂,但归结为以下示例:

这样,当我插入客户订单时,它会强制我不会为这两个字段获取错误类型的人员。 但是当我对 CustomerOrder 执行 'cascading' 读取时,我只加入 Person 而不需要额外加入 'Customer' 和 'Salesrep' tables.

这种做法有什么问题吗?这是 known/named 模式吗?

只有一列的 table 似乎很奇怪,我没有看到很多人这样做,但我看不出有什么问题。我可以将它作为 person table 中的类型字段来实现,但是让外键在其他 table 中工作很尴尬,比如 CustomerOrder(需要复合键吗?)。

(我想我必须在代码中确保同一个人不会同时出现在 Customer 和 SalesRep table 中,但这比尝试在所有 table 指的是 Person)

据我所知,你的做法没有任何问题。您正在遵循 Joined Tables Inheritance 模式,其中 subtables(代表 subclasses)连接到它们的 supertable 通过他们的主键也是引用 supertable.

的外键

当然,在 subtable 没有很多(或任何)附加列的情况下,通常会使用 Single Table Inheritance 方法只有一个 table persons 和一个 type(或 category)列。但是,正如您所注意到的,这将意味着对 CustomerOrder class 的属性 customersalesRep 的约束,这不能作为 [=] 的简单外键来实现16=] table。相反,似乎需要触发器来强制执行这些约束。

因此,在更复杂的 Joined Tables 继承表示与 customersalesRep 的引用完整性约束的更简单实现之间存在权衡,与更简单的表示(使用单一 Table 继承)和更复杂的参照完整性约束实现。