为两个结构相似的对象设计数据库


DB design for two similarly structured objects

我正在用PHP编写两个数据对象,它们非常相似,但应保存在两个单独的表中。因此,我将把它们编码为超类的子类。

超类将包含这两个类的大部分重复函数,用于访问数据库表中的数据。而每个类的特定功能/错误检查/DB访问功能将在子类中实现。

我如何在数据库中实现这一点?我正在考虑需要超类的表。

设计一:TableA和TableB将引用TableSuperClass,并且所有常见的结构化数据都将链接到TableSuperClass而不是子类(TableA和TableB)本身。给出了TableA、TableB、TableSuperClass和CommonData。使用TableA和TableB存储仅特定于类A/B的内容。

设计二:表a和表B的结构基本相同,每个表都有一些额外的列来满足它们的特定需求。超级班将没有桌子。A和B共用的数据将存储在两个单独的表中。所以本质上是表A,表B,表AData,表BData

这两种设计的优点和缺点是什么?

感谢

您引用了一种称为数据库多态性的技术,有时是类表继承,否则就是这样。通常,它是使用您的第一个设计来实现的,但有3个表:一个带有公共列的公共表,以及每个"子类"的一个具有自己唯一列的表。这些通常与公共表上的类型列连接,其中每个子类将在代码中定义自己的类型值,并坚持仅使用该值来连接公共表及其表。