每次我编程时,我都会认识到类和表之间的这种关系,或者我是在想象它。
您可以为每个数据库表创建一个类,也可以为每个类创建一个表,即:
tables: customer, products, order.
classes: customer, products, order, may have methods such as addRecord, deleteRecord, updateRecord.
这个叫什么?对象关系?我不是 DBA。
每次我编程时,我都会认识到类和表之间的这种关系,或者我是在想象它。
您可以为每个数据库表创建一个类,也可以为每个类创建一个表,即:
tables: customer, products, order.
classes: customer, products, order, may have methods such as addRecord, deleteRecord, updateRecord.
这个叫什么?对象关系?我不是 DBA。
除了鲍勃的回答之外,还有以下内容。
在对象建模中,类和子类之间的关系由继承处理,对象建模者知道如何充分利用继承。关系数据模型和扩展的 SQL 数据库不会为您实现继承。你必须设计表格来给你一些相同的结果。
在 ER(Entity-Relationship)建模中,相应的概念称为泛化/专业化。这会告诉您如何对类/子类关系建模,但不会告诉您在构建数据库时如何设计表。
在处理类和子类时,有三种非常容易理解的技术非常有用。以下是他们的标签: single-table-inheritance class-table-inheritance shared-primary-key。不幸的是,许多关于数据库设计的教程从未涵盖这些技术。它们对于了解对象建模并希望加快关系建模速度的人非常有用。
这完全取决于您使用的数据库类型。如果您使用的是面向对象的数据库(OODB),那么就没有关系,因为对象和持久数据是一回事。例如,如果您有一个Customer
类,并将其保存在 OODB 中,那么该客户实例就是存储在 DB 中的内容。
如果您使用的是关系数据库,那么类实例以及它们在数据库中的持久表示可能是同一件事,但很多时候它们不是。这是因为大多数人使用规范化以有效的方式(在关系数据库中)表示他们的数据。这意味着,您可以拥有一个由多个表表示的类,而不是每个类都有一个表。在Customer
示例中,这些表现在可能是Customer
(具有名称、出生日期和其他属性)和Order
(具有指向另一个表中的产品的订单)。其原因与基数有关,以及Customers
有多个订单。当您的业务逻辑需要来自数据库的这些信息时,数据访问层的工作是将数据库中的数据(称为ORM)映射到您的类中。
如果您使用的是另一种类型的数据库,那么类(域模型)与数据库中持久的内容之间会有不同的关系。
但是,至于这种关系的名称呢?不,没有名字。