【发布时间】:2012-02-17 12:27:26
【问题描述】:
我在 PHP 中编码两个数据对象,它们非常相似,但应保存在两个单独的表中。因此,我将它们编码为超类的子类。
超类将包含两个类的大部分重复函数,用于访问数据库表中的数据。而每个类的具体功能/错误检查/数据库访问功能将在子类中实现。
如何在数据库中实现这一点?我正在考虑超类的需要表。
设计一: TableA 和 TableB 将引用 TableSuperClass,所有常见的结构化数据都将链接到 TableSuperClass 而不是子类(TableA 和 TableB)本身。给出 TableA、TableB、TableSuperClass 和 CommonData。使用 TableA 和 TableB 存储特定于 A/B 类的内容。
设计二: TableA 和 TableB 将具有几乎相同的结构,每个都有一些额外的列以满足其特定需求。超级班将没有桌子。 A 和 B 共有的数据将存储在两个单独的表中。所以本质上是TableA、TableB、TableAData、TableBData
这两种设计的优缺点是什么?
谢谢
【问题讨论】:
-
在设计一中,为什么有一个 CommonData 表?那不是 TableSuperClass 的一部分吗?在设计二中,如果 TableAData 和 TableBData 相同,为什么会有 CommonData 和“此记录与表 A 相关,id = 10”的组合键。最后,我认为这实际上取决于您查询的数据和性质 - 如果您能提供更多的洞察力,我们可能会给您更好的指导。两种方式都有各自的优点
-
考虑通读关于数据库对象继承的 Doctrine 2 手册:docs.doctrine-project.org/projects/doctrine-orm/en/2.1/…。不是说要使用 Doctrine 2,尽管它很酷。但我认为它可能会给您一些好主意,并且实际上讨论了您的两种方法以及更多方法。