2012-02-17 87 views
0

我在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数据

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

感谢

+0

在设计之一,为什么你有一个CommonData表?这不是TableSuperClass的一部分吗?在设计二中,为什么你有TableAData和TableBData,如果它们是相同的,为什么不用CommonData或者是“这个记录涉及到表A,id = 10”的组合键。最后,我认为这取决于你的查询的数据和性质 - 如果你能提供更多的信息,我们可以给你提供更好的指导。这两种方式都可能有其优点 – Prescott 2012-02-17 04:19:27

+0

考虑阅读关于数据库对象继承的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

回答

0

你引用的技术叫做数据库多态性,有时类表继承,否则这些方针。通常情况下,它是使用您的第一个设计实现的,但是有3个表格:具有公共列的公共表格和具有其自己的唯一列的每个“子类”的表格。这些通常是通过公共表中的类型列联结在一起的,每个子类都将在代码中定义它自己的类型值,并坚持只使用该值来对公共表和它的表进行联接。