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

Nah*_*kht 2 database oop computer-science database-design

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

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

    tables: customer, products, order.

    classes: customer, products, order, may have methods such as addRecord, deleteRecord, updateRecord.
Run Code Online (Sandbox Code Playgroud)

这个叫什么?对象关系?我不是DBA.

Bob*_*orn 6

这完全取决于您使用的数据库类型。如果您使用的是面向对象的数据库(OODB),则没有关系,因为对象和持久化数据是一回事。举例来说,如果你有一个Customer类,并且将它保存在一个面向对象数据库,则该实例的客户什么存储在数据库中。

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

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

但是,至于为这种关系起个名字吗?不,没有名字。


Wal*_*tty 6

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

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

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

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