数据库表和面向对象的类之间是否存在关系?

时间:2013-02-16 12:14:07

标签: database oop database-design computer-science

每次我编程时,我都会认识到类和表之间的这种关系,或者我在想象它。

每个数据库表或每个类的表可以有一个类,即:

    tables: customer, products, order.

    classes: customer, products, order, may have methods such as addRecord, deleteRecord, updateRecord.
这叫什么?对象关系?我不是DBA。

2 个答案:

答案 0 :(得分:6)

除了鲍勃的回答之外,还有以下几点。

在对象建模中,类和子类之间的关系由继承处理,对象建模者知道如何使用继承来获得良好的优势。关系数据模型和扩展SQL数据库不会为您实现继承。你必须设计表来给你一些相同的结果。

在ER(实体 - 关系)建模中,相应的概念称为泛化/专业化。这告诉您如何建模类/子类关系,但它并没有告诉您在构建数据库时如何设计表。

有三种技术可以很好地理解,在处理类和子类时非常有用。以下是他们的标记: 。不幸的是,许多关于数据库设计的教程从未涉及这些技术。对于了解对象建模并希望加快关系建模速度的人来说,它们非常有用。

答案 1 :(得分:4)

这完全取决于您使用的数据库类型。如果您使用object oriented database(OODB),则没有关系,因为对象和持久数据是相同的。例如,如果您有一个Customer类,并将其保存在OODB中,那么客户实例 将存储在数据库中。

如果你使用relational database,那么类实例,以及它们在数据库中的持久表示,可以是相同的,但很多时候它们不是。这是因为大多数人使用normalization以有效的方式(在关系数据库中)表示他们的数据。这意味着,您可以拥有一个由多个表表示的类,而不是每个类都有一个表。在Customer示例中,表格现在可能是Customer(包含姓名,出生日期和其他属性),以及Order(订单指向另一个表中的产品)。这样做的原因与cardinalityCustomers有多个订单的能力有关。当您的业务逻辑需要来自数据库的此信息时,数据访问层的工作是将数据(称为ORM)从数据库映射到您的类中。

如果您使用的是另一种类型的数据库,那么类(域模型)与数据库中持久存在的内容之间将存在不同的关系。

但是,就这种关系而言,这个名字是什么?不,没有名字。