实体关系模型和关系模型有啥区别?

Posted

技术标签:

【中文标题】实体关系模型和关系模型有啥区别?【英文标题】:What is the difference between an entity relationship model and a relational model?实体关系模型和关系模型有什么区别? 【发布时间】:2015-01-31 20:07:14 【问题描述】:

我只能找到以下两个不同点:

    E-R 模型中的关系是明确定义的,而它们在关系模型中是隐含的。 关系模型需要一个中间表(通常称为“联结表”)来保存实现多对多关系的两个外键。

当我们有 E-R 图时,为什么要使用关系模型?

【问题讨论】:

【参考方案1】:

你说反了。

    E-R 模型中的关系是明确定义的,而它们 隐含在关系模型中。

没有。每个关系模型 (RM) 数据库基表和查询结果代表一个应用程序关系。实体关系建模 (E-RM) 模式只是一种组织(但未充分使用和未指定)(但存在误解)关系表和约束的方式。

    关系模型需要一个中间表(通常称为“联结表”)来保存两个外键,这些外键实现 多对多关系。

没有。对象-关系映射 (ORM) 方法掩盖了它们底层的直接关系应用程序关系、表和约束。 “连接表”的概念源于 ORM 对 E-RM 的混淆表示的误解,而 E-RM 本身也误解了 RM。

正如 C J Date 所说,数据库系统简介,第 8 版:

对 [Chen 的原始论文] 的慈善解读表明,E/R 模型确实是一种数据模型,但它本质上只是 基本关系模型之上的一个薄层 [第 426 页]

对于 IT 领域的现状,简单的解决方案令人遗憾 即使它们过于简单,也很受欢迎。 [第 427 页]

关系模型

每个关系表都代表一个应用关系。

-- employee EID has name NAME and ...
E(EID,NAME,...)

此类事物的数学术语以及表示一个的数学有序元组集合是“关系”。因此,“关系模型”(和“实体-关系建模”)。在数学中,关系经常由参数化语句模板来描述,其中一个数学术语是“特征谓词”。谓词的参数是表的列。在 RM 中,DBA 为每个基表提供一个谓词,用户将根据列值和谓词做出正确陈述的行放入表中,并将做出错误陈述的行排除在外。

/* now also employee 717 has name 'Smith' and ...
    AND employee 202 has name 'Doodle' and ...
*/
INSERT INTO E VALUES (EID,NAME,...)
    (717,'Smith',...),(202,'Doodle',...)

查询表达式还有一个由关系运算符和逻辑运算符(在条件中)构建的谓词。它的值还包含使其谓词为真的行,而忽略使其为假的行。

/* rows where
   FOR SOME E.*, M.*,
        EID = E.EID AND ... AND MID = M.MID
   AND employee E.EID has name E.NAME and ...
   AND manager M.MID has 
   AND E.DEPT = M.DEPT AND E.NAME = 'Smith'
/*
SELECT E.*, M.MID
FROM E JOIN M ON E.DEPT = M.DEPT
WHERE E.NAME = 'Smith'

表的当前行做出正确的陈述,而缺失的行做出错误的陈述是我们如何记录数据库中的应用程序情况以及我们如何解释数据库对应用程序情况所说的内容。如果没有并理解谓词(即应用程序关系),就无法使用或解释数据库。

实体关系建模

E-RM(它并不真正理解 RM)本质上是一种(n 不必要的、受限制的和限制性的)图表符号,用于描述(某些部分)(有限形式的)关系数据库。最初有“实体(类)”图标/关系,其中候选键(CK)值与应用程序实体加上其他列(“实体”的“属性”)为 1:1,并且有“关系(类)”图标/tables 具有实体表的外键 (FK),表示多个实体上的应用程序关系以及其他事物(“关联”的“属性”)。应用程序关系由一个图标表示,该图标与参与其中的各种实体图标连线。 (即,这些行代表 FK。它们不是关系,而是关于表上的约束的陈述。)

E-RM 不理解关系模型。它在应用程序实体和关系之间做出了毫无意义和误导性的区分。毕竟,每个基表或查询结果的每个超键(唯一列集)都与一些应用实体一一对应,而不仅仅是那些有实体表的实体.例如,人们可以通过结婚来联系;但每个这样的关联都是与一个称为婚姻的实体 1:1 的。这会导致标准化和约束不足,从而导致冗余和完整性损失。或者当这些步骤充分完成时,它会导致 E-R 图实际上没有描述应用程序,而应用程序实际上是由关系数据库谓词、表和约束来描述的。那么E-R图既是模糊的、多余的又是错误的。

简写 E-RM 和 ORM

许多声称是 E-RM 的演示文稿和产品都扭曲了 E-RM,更不用说 RM。他们使用“关系”一词来表示 FK 约束。这出现如下。当 E-RM 关系是二进制时,它是一个符号,其 FK 有两行。所以这三件事可以用 FK 之间的一条线代替。这种线表示特定的二元关系及其 FK,但现在 ER 关系在图中并不明确,尽管 ER 关系在速记版本中是明确的,并且它反映在 图中的图片中的表格中,即他们正在描述的关系数据库。这被称为“连接表”。人们谈论该行/表是/表示实体和/或关联之间的“X:Y 关系”实际上从未注意到这是一个特定的应用程序关系。并且在相同的两个实体和/或关联之间可能存在许多这样的应用关系。

ORM 也这样做,但也只用它们的 FK 替换 n 元关联,以便进一步模糊关联的应用程序关系和表。 Active Records 更进一步,一次定义了几个速记关系及其表,相当于速记 E-RM 图中的一系列 FK 线和关联图标。许多建模技术加剧了这种情况,包括 E-RM 和 ORM 的版本,还认为应用程序关系只能是二进制的。同样,这在历史上源于对 RM 缺乏了解。

【讨论】:

【参考方案2】:

它们本身就是两个不同的东西。关系模型将信息表示为元组,直接映射到关系模式。该指南源于关系代数。

同时,ER 图使用实体对系统中用户与其基础数据之间的关系进行建模。 ER 图可以映射到关系模型,最后映射到工作模式。

【讨论】:

以上是关于实体关系模型和关系模型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Django模型中的OneToOneField和ForeignKey有啥区别

多表继承模型和相同两个模型之间的简单一对一关系有啥区别?

数据库原理及应用-数据模型之关系数据模型

dbfirst和codefirst有啥区别

模型和数组有啥关系?情况很复杂

oracle ERD中的那条线有啥区别?