likes
comments
collection
share

(数据库原理与应用)使用ER模型设计数据库 -7

作者站长头像
站长
· 阅读数 68

前言-ER模型的前世今生

  1. 起源(1960年代) : ER模型最早由彼得·陈(Peter Chen)在20世纪60年代提出。他的目标是建立一个用于数据库设计的抽象模型,以帮助人们更好地理解和设计数据库结构。ER模型主要关注实体、属性和实体之间的关系。
  2. 发展与标准化(1970年代-1980年代) : ER模型很快得到了广泛的认可,数据库领域的研究人员和从业者开始积极使用它。在这一时期,ER模型经历了一些扩展和变化,包括基于Chen的原始模型的ERD(Entity-Relationship Diagrams)的不同变种。此外,Codd的关系模型也开始崭露头角,逐渐成为数据库设计的主要方法。
  3. ER模型的演变(1990年代-2000年代) : ER模型继续演变,以满足不断发展的数据库需求。在这一时期,对象关系模型(Object-Relational Model)开始受到关注,它将面向对象的思想引入了ER模型,以更好地处理复杂数据结构。
  4. 今天(2010年代以后) : ER模型仍然是数据库设计的重要工具之一。随着NoSQL数据库的兴起,以及复杂的数据模型需求,数据库设计变得更加多样化。ER模型和其他建模工具仍然在许多场景中得到广泛应用,但数据库设计师和开发人员也考虑了其他方法,以更好地满足不同类型的数据存储和访问需求。

1. ER模型

E-R模型是数据库设计中广泛使用的数据模型。它提供了一个便捷的图形表示,即E-R图,用于查看数据、关系和约束。E-R数据模型采用三个基本概念:

实体集(Entity sets)

实体集(Entity Sets)指的是一组具有相同类型的实体(Entities)的集合。在数据库和关系数据库管理系统中,实体是指可以单独存在且可以与其他对象区分的对象。这些实体可以分为两种主要类别:具体实体和抽象实体。具体实体包括像人、公司和书这样的具体物体,而抽象实体则包括像课程这样的抽象概念。

每个实体都可以由一组属性(Attributes)来表示。例如,一个人实体可以有姓名和地址作为其属性。属性是用来描述实体的特征或特性的信息。

实体的键(Key)`是一组属性,足以区分不同实体之间的属性集。有三个与实体键相关的重要术语:

  1. 超键(Superkey):超键是能够唯一标识实体的属性集合。它可能包含冗余的属性,但仍能唯一标识实体。超键的目的是确保实体可以被唯一识别。
  2. 候选键(Candidate Key):候选键是超键的子集,它具备唯一性并且不包含任何多余的属性。在所有可能的候选键中,通常选择一个作为主键。
  3. 主键(Primary Key):主键是从候选键中选择的一个,用来唯一标识实体,并在数据库中用来建立关系和索引。主键是数据库设计中非常重要的概念,因为它确保了数据的完整性和一致性。

教师与学生的实体集: (数据库原理与应用)使用ER模型设计数据库 -7

在ER图中表示实体集:

  1. 实体符号:实体通常使用矩形来表示。每个矩形代表一个实体集,其名称写在矩形内部。
  2. 属性:您可以在矩形内部列出与每个实体关联的属性。属性通常用椭圆形表示,并通过线连接到实体矩形。
  3. 下划线属性:如果属性是实体的键的一部分(候选键或主键),您可以用下划线表示其唯一性。

(数据库原理与应用)使用ER模型设计数据库 -7

关系集(Relationship sets)

关系集是数据库设计和实体-关系模型中的重要概念,用于描述不同实体之间的关联。它表示多个实体之间的关系,允许数据库模型中的不同表(关系)之间建立连接。以下是对关系集的详细介绍:

  1. 定义:关系集是一组关系的集合,这些关系具有相同的语义含义,即它们描述相同类型的实体之间的联系。
  2. 关系:关系集中的每个关系代表一个特定的连接或关联。这些关系通常由多个实体的实例组成,每个实例与其他实例之间都有特定的关联。
  3. 示例:例如,在学生管理系统中,有一个关系集可以表示学生和课程之间的关系。每个关系可以表示一个学生注册了哪些课程。这个关系集包括多个关系,每个关系对应一个学生和一个课程的关联。
  4. 属性:关系集可以包含与关系本身相关的属性。这些属性描述了关系的特性,例如注册日期、成绩等。在关系数据库中,这些属性存储在关系表中的列中。
  5. 关系集的符号表示:在实体-关系图(ER图)中,关系集通常用菱形图标表示,而关系的名称写在这个图标内部。

(数据库原理与应用)使用ER模型设计数据库 -7

如果需要带属性,那么可以这么表示:

(数据库原理与应用)使用ER模型设计数据库 -7

  1. 实体与关系集的连接:关系集在数据库模型中用于连接不同实体集。例如,一个关系集可以连接学生实体集和课程实体集,以表示哪些学生注册了哪些课程。
  2. 主要作用:关系集的主要作用是建立数据库中的数据关联,允许在不同实体之间进行查询、检索和分析,从而支持各种应用,如学生管理系统、库存追踪系统等。

在数据库设计和实体关系建模中,有时关系的实体集不一定是互不相同的。每个实体集在关系中的每次出现都可以扮演一个特定的角色(Role)。这意味着相同的实体集可以在关系中扮演不同的角色,以表示它们在关系中的不同作用或含义。这种概念使我们能够更精细地描述实体之间的关系。

举例来说,考虑一个课程选择系统,其中有一个关系表示课程之间的先修关系。在这种情况下,关系包含两个实体集:课程(Courses)和它们的先修课程(Prerequisites)。在这个关系中,每个实体集都扮演不同的角色。课程实体集在关系中的角色可能是被要求完成的课程,而先修课程实体集在关系中的角色可能是必须在选择某门课程之前完成的课程。这两个角色有助于更清晰地定义关系的含义和目的。

递归关系如下

(数据库原理与应用)使用ER模型设计数据库 -7

如上图,course_idprereq_id可以被称为角色(roles),指的是实体集在关系中的不同角色或作用。它表示在同一个关系中,一个实体集可能会以不同方式参与关系,扮演不同的角色或具有不同的含义。这有助于更清晰地定义和描述实体集之间的关系。在关系模型中,"Roles"帮助区分关系中的不同部分,以便更好地理解关系的结构和目的。

关系集的度

关系集中涉及的实体集的数量。这是一个概念,用来描述一个关系集中有多少不同的实体集参与其中。

二元关系(Binary Relationships): 是指关系中涉及两个实体集的情况。在数据库设计中,它表示一个关系集的度为二,也就是只涉及两个实体集之间的关系,在数据库系统中,大部分关系集都是二元关系,即它们涉及两个实体集之间的关系。这是因为在大多数情况下,数据库中的关系可以被有效地建模为涉及两个实体集的关系。

除此之外涉及三个实体集的关系集称为三元关系(ternary) 三元关系示例:

(数据库原理与应用)使用ER模型设计数据库 -7

属性(Attributes)

  1. 简单属性(Simple Attributes):

    • 简单属性是数据模型中的基本属性,它们不能再分解为更小的子属性。例如,一个人的姓名、地址或电子邮件地址可以视为简单属性。
  2. 复合属性(Composite Attributes):

    • 复合属性由多个简单属性组成,用于更详细地描述一个实体的某个方面。例如,一个人的地址可以分解为街道、城市、州和邮政编码等多个简单属性,这些简单属性组成了复合属性。

(数据库原理与应用)使用ER模型设计数据库 -7

  1. 单值属性(Single-Valued Attributes):

    • 单值属性是只包含一个值的属性。例如,一个人的出生日期通常是单值属性,因为每个人只有一个出生日期。
  2. 多值属性(Multi-Valued Attributes):

    • 多值属性可以包含多个值,用于表示一个实体的多个相关信息。例如,一个人可以有多个电话号码,每个电话号码就是一个多值属性,如phone_numbers。
  3. 派生属性(Derived Attributes):

    • 派生属性是可以通过计算或基于其他属性的值来获得的属性。例如,一个人的年龄可以从其出生日期(date_of_birth)计算得出,因此年龄是一个派生属性。

在ER图中表示复杂属性

(数据库原理与应用)使用ER模型设计数据库 -7

2.映射基数

对于实体集A和B之间的二元关系集R:

  1. 一个在A中的实体可以与多个在B中的实体关联。
  2. 一个在B中的实体可以与多个在A中的实体关联。

对于二元关系集R,可以有以下映射基数(mapping cardinality) 类型:

  • 一对一(One to one):每个A中的实体与一个唯一的B中的实体相关联,反之亦然。
  • 一对多(One to many):每个A中的实体与任意个B中的实体相关联,但每个B中的实体只能与一个A中的实体相关联。

注意: 这里的任意个指的是零个或多个

  • 多对一(Many to one):每个A中的实体只能与一个B中的实体相关联,但每个B中的实体可以与多个A中的实体相关联。

其实A对B一对多反过来B对A就是多对一了

  • 多对多(Many to many):每个A中的实体可以与多个B中的实体相关联,反之亦然。

在ER图中表示基数约束

  1. 使用带有有向箭头的线(→)来表示 "one"(最多一个)关系,这表示一个实体可以与另一个实体有一对一的关系。
  2. 使用不带箭头的线(—)来表示 "many"(任意个,包括零个)关系,这表示一个实体可以与多个实体有一对多的关系。
  • 一对一的表示: (数据库原理与应用)使用ER模型设计数据库 -7 图中表示一个导师最多有一个学生,而一个学生最多也只有一个导师

  • 一对多的表示:

(数据库原理与应用)使用ER模型设计数据库 -7 图中表示一个导师可以有任意个(包括零个)学生,而一个学生最多只有一个老师,反过来便是多对一的表示

  • 多对多的表示

(数据库原理与应用)使用ER模型设计数据库 -7

参与

参与(participation) 描述了实体集合中的实体与关系集合中的关系之间的参与程度,它可以被看作是映射基数的一种特定情况。全参与(total participation) 表示一对多或多对多的映射基数,而部分参与(partial participation) 表示多对一或一对一的映射基数,取决于实体集合中的每个实体是否必须参与关系集合中的至少一个关系。

更复杂约束的表述法

min 表示每个实体参与关系的最小次数,而 max 表示每个实体参与关系的最大次数。特别地,如果 max 的值为 * 则表述没有限制,表示的格式如下:

(数据库原理与应用)使用ER模型设计数据库 -7

例子如下

(数据库原理与应用)使用ER模型设计数据库 -7

表示最小有0个最多有任意个导师参与到这个关系中,而只能有一个学生参与到这个关系中

3.主键

关系集的键

参与实体集的主键组合形成了关系集的超键。 (student_id, instructor_id) 是指导老师(advisor)的超键。

那么,关系集合的主键是什么呢? 这取决于关系集合的映射基数。 如果关系集合 advisor 在学生和教师之间的映射基数是:

  • 多对多:advisor 的主键是 {student_id, instructor_id}
  • 多对一:advisor 的主键是 {student_id}
  • 一对多:advisor 的主键是 {instructor_id}
  • 一对一:advisor 的主键是 {student_id} 或 {instructor_id} 中的任何一个。

弱实体集与强实体集

  • 弱实体集(Weak Entity Set)没有足够的属性来构成一个主键,因此它通常依赖于与其关联的强实体集来获得标识。 弱实体集通常存在于与其关联的强实体集之中,以便通过强实体集的标识属性来唯一标识它们。

  • 强实体集(Strong Entity Set)有足够的属性来构成一个主键,因此它可以独立标识和区分实体。强实体集的主键是用于唯一标识其中包含的实体的属性集。

对于一个弱实体集(Weak Entity Set),它必须通过一个识别关系(Identifying Relationship) 与一个标识实体集(Owner Entity Set) 相关联。这个识别关系通常是从标识实体集到弱实体集的一对多关系,并且弱实体集的参与度是总的。

简而言之,标识关系是一种关系,用于将弱实体集与其标识实体集关联起来,同时确保弱实体集的每个实体都有一个唯一的标识实体。这是在数据库设计中用于处理弱实体的一种常见方法,以确保数据的完整性和一致性。

弱实体集的标识符(或部分键)是一组属性,用于区分同一标识实体内的弱实体。弱实体集的主键由强实体集的主键和弱实体集的标识符组成。我们通常使用双菱形来表示识别关系,而用虚线下划线来强调标识符

一个弱实体集可以参与除了标识关系之外的其他关系。此外,一个弱实体集还可以在一个标识关系中作为拥有者参与,而这个标识关系可能涉及另一个弱实体集。一个弱实体集可以与多个标识实体集相关联,因此一个特定的弱实体可能由多个标识实体的组合来唯一标识。

(数据库原理与应用)使用ER模型设计数据库 -7

4. 将 E-R 图简化为关系模式

数据库设计的过程

  • 需求分析

数据库设计者与领域专家和数据库用户协商去了解用户的数据需求

  • 概念设计(Conceptual Design)

将用户需求转换为实体关系模型(ER模型)

  • 逻辑设计(Logical Design)

设计师将实体关系数据模型映射到关系数据库模式。

  • 物理设计

决定数据库的物理布局,包括文件组织形式和内部存储结构的确定。

下文将介绍实体关系数据模型映射到关系数据库模式(逻辑设计)

表示实体集

(数据库原理与应用)使用ER模型设计数据库 -7

强实体集

  • course (course_id, title, credits)

弱实体集

  • section (course_id, sec_id, semester, year) 外键(FK): course_id

表示复合属性

(数据库原理与应用)使用ER模型设计数据库 -7

  • instructor(ID,first_name, middle_initial, last_name,street_number, street_name,apt_number, city, state, zip_code,date_of_birth)

表示多值属性

instructor的多值属性“phone_number”通过新的关系模式来表示

  • inst_phone (ID, phone_number) 外键: ID

一个具有主键为 11111 且电话号码为 456-7890 和 123-4567 的instructor实体会映射成两个元组: (11111, 456-7890) 和 (11111, 123-4567)

关系集到关系模式的转化

多对多关系集

多对多关系集可以表示为一个模式,其中包括参与的两个实体集的主键属性,以及关系集的任何描述性属性。

(数据库原理与应用)使用ER模型设计数据库 -7

advisor(s_id,i_id) 外键1:s_id,外键:i_id

多对一关系集

多对一关系集可以通过将“一”方的主键属性添加到“多”方来表示。

(数据库原理与应用)使用ER模型设计数据库 -7

instructor(ID,name,salary,dept_name) 外键:dept_name

一对一关系集

对于一对一关系集,可以在任一方添加额外属性。

(数据库原理与应用)使用ER模型设计数据库 -7

instructor(ID,name,salary,student_id) 外键:student_id

student(ID,name,tot_cred)

或者

instructor(ID,name,salary)

student(ID,name,tot_cred,instructor_id) 外键:instructor_id

关系属性的放置

一对多关系集的属性 一对多关系集的属性可以重新放置到多方的实体集上。

一对一关系集的属性 一对一关系集的属性可以重新放置到任一方的实体集上。

转载自:https://juejin.cn/post/7293783188232667148
评论
请登录