ER数据模型简介

实体关系数据模型的简单但全面的概述

实体关系数据模型, 也被称为急诊室,是各种数据模型您可以用来推断数据。

特别是概念数据模型,因为它没有链接到任何特定的实现。这是逻辑数据模型的任务。

ER数据模型它是如此通用,如此高级,以至于可以通过各种完全不同的数据库来实现。

太好了,因为您无需考虑实现细节,而只需考虑您的数据及其组织方式。在这样做的同时,您不得不以以前从未想到的方式来分析问题。

我发现ER图非常有助于您分析涉及数据的场景。

ER模型为您提供了使用图形表示法来表示您需要建模的所有数据,不同类型的数据之间的关系以及与之相关的信息的工具。

组成ER模型的项目有2个:

  • 实体
  • 关系

实体是具有共同属性的数据类型,例如项目或人。

关系是实体之间的关系。

让我举一个例子,让我们谈谈书籍及其作者。我们有2个实体

  • 作者

特定书籍是书籍实体的实例。

由于我们有2个实体,所以我们有2关系它们之间。一种是单本书与作者实体之间的关系。一种是单个作者与图书实体之间的关系。如果我们考虑一下,我们有:

  • 一本书有一位作者
  • 作者可以写很多不同的书

实体的视觉符号

给出了这个简单的示例,我们可以开始引入视觉符号,这将有助于我们创建场景的ER数据模型。

注意:有许多种绘制ER图的方法。我会用那个在我看来,更直观,更有意义。

实体以矩形表示,其中包含一些文本以标识它们:

Entities

关系的视觉符号

实体之间的关系以最基本的形式表示,它使用连接两个关系的线和一个带有一些文本的菱形来标识关系的类型:

Relation example

请注意,我没有创建“书有作者”和“作者写书”这两个关系。我在书和作者之间建立了一个“作者”关系。

基数

建立关系后,我们现在必须指出所涉及的数字。目前,我们有很多问题:

  • 一本书可以有多少作者?
  • 作者可以写多本书吗?
  • 作者是否需要写至少一本书才能被称为作者?
  • 一本书可以由多位作者撰写吗?
  • 一本书至少可以没有作者存在吗?

所有这些都是很好的问题,在这种情况下,我认为答案非常明显。当答案不明显时,您可以考虑问题并添加自己的约束。

有多种方法可以在图表上直观地指示基数。有些人喜欢在链接到实体时更改线的形状。

我更喜欢数字,这使事情更清楚:

Cardinality example

上面的数字表示这:一本书可以由1个或更多的作者创作。n表示任意数量的元素。

一个作者可以创作0本书(也许现在正在写一本书)到无数本书。

第一个叫做零对多关系。第二个是一对多关系

我们还可以:

  • 一对一关系
  • 多对多关系
  • 零对一关系

属性

每个实体可以具有一个或多个属性。

假设我们将在书店中使用上述关系。每个作者都有一个名称,个人简介和网站URL。

每本书都有标题,出版商,出版年份和ISBN。如果我们愿意,发布者也可以是实体。但是我们也可以将其定义为书的属性。

这就是我们可以表示上述信息的方式:

Attributes example

标识符属性

实体必须由唯一的密钥标识。图书实体可以由ISBN属性唯一标识。每本书都有一个ISBN(考虑到我们不代表一本书的单个副本,而是代表书的“书名”)。

我们通过将它们作为基础来识别主键属性:

Key

另一方面,作者目前没有唯一标识符。两位作者可以使用相同的名字。

因此,我们必须添加唯一的键属性。例如一个id属性:

id attribute

标识符属性可以跨越多个属性。

例如,护照ID和作者所在国家/地区可以唯一地标识此人,并且可以替换id我们添加的属性:

multiple attributes key

选择哪一个?这是什么在您的应用程序中更有意义的问题。如果我们正在为书店建模,就不能期望拥有所有图书作者的国家/地区和护照ID。因此,我们将使用随机id我们将选择每位作者并与之联系。

关系属性

属性不是实体唯一的。关系也可以具有属性。

考虑我们需要对一个库进行建模。除了书籍和作者实体,我们现在介绍读者实体,一个借书的人。当他们借用时,我们会使用它的名称和身份证号:

relation without attribute

但是我们仍然错过信息。我们需要知道该人何时借书以及他们还书的日期,因此我们可以将有关特定书的所有历史的信息存储在我们的图书馆中。此信息既不属于书籍也不属于读者实体;它属于以下关系:

relation attributes

弱实体

我们在上面讨论了主键,以及帮助如何唯一地标识实体。

一些实体的存在依赖于其他实体,因此被称为弱实体

假设我们需要为在线商店的订单建模。

对于每个订单,我们将存储从1开始并随时间增加的订单ID,下订单的日期和时间以及有关客户的信息,因此我们知道向谁付款以及在哪里发货。

然后,我们还需要知道他们订购了什么。我们创建一个弱实体“订购商品”,该实体代表结帐时购物车中的每个商品。

weak entity

该实体将在结帐时存储商品价格(因此,当我们更改所售商品的价格时,它不会影响已经下达的订单),已订购商品的数量以及选择的选项。假设我们出售T恤,因此我们需要存储订购的T恤的颜色和尺寸。

它是一个弱实体,因为没有订单实体就无法存在订购商品实体。

递归关系

实体可以与自己具有递归关系。假设我们有一个人实体。我们可以通过以下方式对父子关系进行建模:

recursive relation

一个人可以有0到n个孩子,一个孩子有2个父母(考虑最简单的情况)。

ISA关系

ISA代表IS-A,它是在ER模型中建模概括的一种方法。

我们使用它来将相似的实体归为一类。例如,在书籍和图书馆示例的情况下,可以使用人员实体来概括作者和读者。

他们都有名字,所以我们提取名字直到个人实体,然后管理相应实体中作为作者或读者的特殊性:

isa relation

非二元关系

并非每个关系都是严格的二元关系。让我们来看一个课程场景。

今天10:00在学校一间教室里和一位老师一起上了一堂关于物理课的课程。

因此,在一天的特定时间上一堂课,它涉及一个科目,一个老师,一个班级和一个教室。

我们可以通过以下方式对其进行建模:

non-binary relation


更多数据库教程: