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