2

I have an application that has only two tables: products and type - where each product can have multiple types as attributes. I decided to normalize the database and created another table where I intend to keep the relations between the products and types.

(Disclaimer: I'm relatively new to object oriented programming). I have a class for products, and a class for types. I have been told that I should have a class for every table that I have in the database. Does this also apply to a table created for normalization purposes? If so - what is the best way of dealing with this - should I somehow call both other classes in this third class, or keep it an independent class, and just manage the exchange of information through actual forms on the webpage, etc?

4

2 回答 2

1

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

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

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

getProducts() {
    // retrieve the products for this type and return
}
于 2013-06-27T20:20:34.773 回答
0

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

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

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

阻抗失配

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

于 2013-06-27T21:15:07.560 回答