创建规范化表时需要新类吗?

时间:2013-06-27 20:15:11

标签: php oop normalization

我有一个只有两个表的应用程序:产品和类型 - 其中每个产品可以有多种类型作为属性。我决定规范化数据库并创建另一个表,我打算保持产品和类型之间的关系。

(免责声明:我对面向对象编程比较陌生)。我有一个产品类和一个类的类。我被告知我应该为数据库中的每个表都有一个类。这是否也适用于为规范化目的而创建的表?如果是这样 - 处理这个问题的最佳方法是什么 - 我应该以某种方式调用第三类中的其他类,或者保持它是一个独立的类,并通过网页上的实际表单来管理信息交换等?

2 个答案:

答案 0 :(得分:1)

如果product_types表只包含外键,则无需将其映射到自己的类。由于这是在表之间定义多对多的关系,因此您可以在产品类中提供一种方法来获取类型。

getTypes() {
    // retrieve the types for this product and return
}

然后在types对象中添加相反的方法来获取产品。

getProducts() {
    // retrieve the products for this type and return
}

答案 1 :(得分:0)

  

我被告知我应该为数据库中的每个表都有一个类。这是否也适用于为规范化目的而创建的表?

通常在设计数据库时,首先需要创建一个概念数据模型。这将允许您定义实体以及定义它们之间的关系。然后创建逻辑数据模型来表征和优化您的实体。最后一步是物理数据模型,它是与数据库最接近的模型。现在,在此模型中,您的entites现在是表格,其中一些可能与您的应用程序域相关或不相关。

例如,您可以拥有一个旅行社申请表,您可以在那里找到目的地,航班公司等的表格......这些表格将直接映射到您的应用程序,因为它们代表具体的类别。另一方面,你也有配置,稀疏数据(计费...)或关联表(就像你在这里)。它们不会映射到您当前的应用程序。这个概念称为阻抗不匹配。见我在网上找到的这个图:

impedance mismatch

最后回答你的问题:不,你不需要将它映射到一个类,因为它在应用程序域中无关。当然你还需要以某种方式处理它(基本上使用DAO和SQL)。您也可以使用ORM,如@RobW的评论中所建议的那样,它可以直接抽象和映射您的数据库。