【问题标题】:Is there a relationship between Database Tables and Object Oriented Classes?数据库表和面向对象的类之间有关系吗?
【发布时间】:2013-02-16 12:14:06
【问题描述】:

每次我编写程序时,我都会认识到类和表之间的这种关系,或者是我想象出来的。

您可以为每个数据库表创建一个类,也可以为每个类创建一个表,即:

    tables: customer, products, order.

    classes: customer, products, order, may have methods such as addRecord, deleteRecord, updateRecord.

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

【问题讨论】:

  • 这个没有名字。你有对象,你有数据。数据需要进入对象和来自对象。 似乎两者之间存在关系是因为大多数软件及其数据存储都是由同一个人设计的。
  • yah.. 例如,可能有 customer_details 和 customer_transaction 的表,但两者都可以从类 customer 管理.. 可能不是很聪明的例子,但你明白了..跨度>
  • 叫做ORM:对象-关系映射

标签: database oop database-design computer-science


【解决方案1】:

除了 Bob 的回答之外,还有以下内容。

在对象建模中,类和子类之间的关系由继承处理,对象建模者知道如何充分利用继承。关系数据模型和扩展的 SQL 数据库不会为您实现继承。您必须设计表格才能获得相同的结果。

在 ER(实体-关系)建模中,对应的概念称为泛化/特化。这会告诉您如何对类/子类关系建模,但不会告诉您在构建数据库时如何设计表。

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

【讨论】:

    【解决方案2】:

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

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

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

    但是,至于这种关系的名称?不,没有名字。

    【讨论】:

    • 那么当同时使用 OOP 和 RMDBS 时,如果一个类有一个成员字段是一个集合类型(如列表、集合等),是否表示单独的表?
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2019-12-05
    • 2014-08-05
    • 2011-08-21
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多