我在PHP中编写了PHP中的两个数据对象,它们非常相似,但应保存在两个单独的表中。因此,我将把它们编码为超类的子类。两个类似结构化对象的数据库设计
超类将保存大部分两个类的重复函数,用于访问数据库表中的数据。每个类的特定功能/错误检查/ DB访问功能将在子类中实现。
我该如何在数据库中实现这一点?我正在考虑超类的表的需要。
设计一: TableA和TableB将引用TableSuperClass,并且所有通常结构化的数据都将链接到TableSuperClass而不是子类(TableA和TableB)本身。给TableA,TableB,TableSuperClass和CommonData。使用TableA和TableB存储特定于A/B类的事物。
设计二: TableA和TableB将具有大部分相同的结构,每个具有几个额外的列以满足他们的特定需求。没有超级班的桌子。 A和B共有的数据将存储在两个独立的表中。所以基本上是表A,表B,表A,表B数据
这两种设计的优点和缺点是什么?
感谢
在设计之一,为什么你有一个CommonData表?这不是TableSuperClass的一部分吗?在设计二中,为什么你有TableAData和TableBData,如果它们是相同的,为什么不用CommonData或者是“这个记录涉及到表A,id = 10”的组合键。最后,我认为这取决于你的查询的数据和性质 - 如果你能提供更多的信息,我们可以给你提供更好的指导。这两种方式都可能有其优点 – Prescott 2012-02-17 04:19:27
考虑阅读关于数据库对象继承的Doctrine 2手册:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/inheritance-mapping.html。不要说使用Doctrine 2,即使它非常酷。但我认为这可能会给你一些好的想法,并且实际上讨论你的两种方法以及其他一些方法。 – Cerad 2012-02-17 04:23:47