【问题标题】:Need a new class when creating a normalized table?创建规范化表时需要一个新类吗?
【发布时间】:2013-06-25 11:58:51
【问题描述】:

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

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

【问题讨论】:

  • 我建议使用 ORM 来处理这个问题.. 甚至是一个框架,比如 Laravel 4
  • 谢谢,我打算将来可能会使用一个框架,但现在我正在使用这个项目来学习一些基础知识,并试图增加我的编程能力。

标签: php oop normalization


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    有人告诉我,我应该为数据库中的每个表创建一个类。这是否也适用于为标准化目的而创建的表?

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

    例如,您可以有一个旅行社应用程序,其中包含目的地、航空公司等的表格...这些将直接映射到您的应用程序,因为它们代表具体的类。另一方面,您也有配置、稀疏数据(计费...)或关联表(就像您在这里一样)。它们不会映射到您当前的应用程序。这个概念被称为阻抗失配。看看我在网上找到的这张图:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2011-01-06
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2011-05-12
      相关资源
      最近更新 更多