前言-ER模型的前世今生
- 起源(1960年代) : ER模型最早由彼得·陈(Peter Chen)在20世纪60年代提出。他的目标是建立一个用于数据库设计的抽象模型,以帮助人们更好地理解和设计数据库结构。ER模型主要关注实体、属性和实体之间的关系。
- 发展与标准化(1970年代-1980年代) : ER模型很快得到了广泛的认可,数据库领域的研究人员和从业者开始积极使用它。在这一时期,ER模型经历了一些扩展和变化,包括基于Chen的原始模型的ERD(Entity-Relationship Diagrams)的不同变种。此外,Codd的关系模型也开始崭露头角,逐渐成为数据库设计的主要方法。
- ER模型的演变(1990年代-2000年代) : ER模型继续演变,以满足不断发展的数据库需求。在这一时期,对象关系模型(Object-Relational Model)开始受到关注,它将面向对象的思想引入了ER模型,以更好地处理复杂数据结构。
- 今天(2010年代以后) : ER模型仍然是数据库设计的重要工具之一。随着NoSQL数据库的兴起,以及复杂的数据模型需求,数据库设计变得更加多样化。ER模型和其他建模工具仍然在许多场景中得到广泛应用,但数据库设计师和开发人员也考虑了其他方法,以更好地满足不同类型的数据存储和访问需求。
1. ER模型
E-R模型是数据库设计中广泛使用的数据模型。它提供了一个便捷的图形表示,即E-R图,用于查看数据、关系和约束。E-R数据模型采用三个基本概念:
- 实体集(Entity sets)
实体集(Entity Sets)
指的是一组具有相同类型的实体(Entities)
的集合。在数据库和关系数据库管理系统中,实体是指可以单独存在且可以与其他对象区分的对象。这些实体可以分为两种主要类别:具体实体和抽象实体。具体实体包括像人、公司和书这样的具体物体,而抽象实体则包括像课程这样的抽象概念。每个实体都可以由一组
属性(Attributes)
来表示。例如,一个人实体可以有姓名和地址作为其属性。属性是用来描述实体的特征或特性的信息。实体的键(Key)`是一组属性,足以区分不同实体之间的属性集。有三个与实体键相关的重要术语:
- 超键(Superkey):超键是能够唯一标识实体的属性集合。它可能包含冗余的属性,但仍能唯一标识实体。超键的目的是确保实体可以被唯一识别。
- 候选键(Candidate Key):候选键是超键的子集,它具备唯一性并且不包含任何多余的属性。在所有可能的候选键中,通常选择一个作为主键。
- 主键(Primary Key):主键是从候选键中选择的一个,用来唯一标识实体,并在数据库中用来建立关系和索引。主键是数据库设计中非常重要的概念,因为它确保了数据的完整性和一致性。
教师与学生的实体集:
在ER图中表示实体集:
- 实体符号:实体通常使用矩形来表示。每个矩形代表一个实体集,其名称写在矩形内部。
- 属性:您可以在矩形内部列出与每个实体关联的属性。属性通常用椭圆形表示,并通过线连接到实体矩形。
- 下划线属性:如果属性是实体的键的一部分(候选键或主键),您可以用下划线表示其唯一性。
- 关系集(Relationship sets)
关系集是数据库设计和实体-关系模型中的重要概念,用于描述不同实体之间的关联。它表示多个实体之间的关系,允许数据库模型中的不同表(关系)之间建立连接。以下是对关系集的详细介绍:
- 定义 :关系集是一组关系的集合,这些关系具有相同的语义含义,即它们描述相同类型的实体之间的联系。
- 关系:关系集中的每个关系代表一个特定的连接或关联。这些关系通常由多个实体的实例组成,每个实例与其他实例之间都有特定的关联。
- 示例:例如,在学生管理系统中,有一个关系集可以表示学生和课程之间的关系。每个关系可以表示一个学生注册了哪些课程。这个关系集包括多个关系,每个关系对应一个学生和一个课程的关联。
- 属性:关系集可以包含与关系本身相关的属性。这些属性描述了关系的特性,例如注册日期、成绩等。在关系数据库中,这些属性存储在关系表中的列中。
- 关系集的符号表示:在实体-关系图(ER图)中,关系集通常用菱形图标表示,而关系的名称写在这个图标内部。
如果需要带属性,那么可以这么表示:
- 实体与关系集的连接:关系集在数据库模型中用于连接不同实体集。例如,一个关系集可以连接学生实体集和课程实体集,以表示哪些学生注册了哪些课程。
- 主要作用:关系集的主要作用是建立数据库中的数据关联,允许在不同实体之间进行查询、检索和分析,从而支持各种应用,如学生管理系统、库存追踪系统等。
在数据库设计和实体关系建模中,有时关系的实体集不一定是互不相同的。每个实体集在关系中的每次出现都可以扮演一个特定的角色(Role) 。这意味着相同的实体集可以在关系中扮演不同的角色,以表示它们在关系中的不同作用或含义。这种概念使我们能够更精细地描述实体之间的关系。
举例来说,考虑一个课程选择系统,其中有一个关系表示课程之间的先修关系。在这种情况下,关系包含两个实体集:课程(Courses)和它们的先修课程(Prerequisites)。在这个关系中,每个实体集都扮演不同的角色。课程实体集在关系中的角色可能是被要求完成的课程,而先修课程实体集在关系中的角色可能是必须在选择某门课程之前完成的课程。这两个角色有助于更清晰地定义关系的含义和目的。
递归关系如下
如上图,course_id
和prereq_id
可以被称为角色(roles),指的是实体集在关系中的不同角色或作用。它表示在同一个关系中,一个实体集可能会以不同方式参与关系,扮演不同的角色或具有不同的含义。这有助于更清晰地定义和描述实体集之间的关系。在关系模型中,"Roles"帮助区分关系中的不同部分,以便更好地理解关系的结构和目的。
关系集的度
关系集中涉及的实体集的数量。这是一个概念,用来描述一个关系集中有多少不同的实体集参与其中。
二元关系(Binary Relationships): 是指关系中涉及两个实体集的情况。在数据库设计中,它表示一个关系集的度为二,也就是只涉及两个实体集之间的关系,在数据库系统中,大部分关系集都是二元关系,即它们涉及两个实体集之间的关系。这是因为在大多数情况下,数据库中的关系可以被有效地建模为涉及两个实体集的关系。
除此之外涉及三个实体集的关系集称为三元关系(ternary) 三元关系示例:
- 属性(Attributes)
简单属性(Simple Attributes):
- 简单属性是数据模型中的基本属性,它们不能再分解为更小的子属性。例如,一个人的姓名、地址或电子邮件地址可以视为简单属性。
复合属性(Composite Attributes):
- 复合属性由多个简单属性组成,用于更详细地描述一个实体的某个方面。例如,一个人的地址可以分解为街道、城市、州和邮政编码等多个简单属性,这些简单属性组成了复合属性。
单值属性(Single-Valued Attributes):
- 单值属性是只包含一个值的属性。例如,一个人的出生日期通常是单值属性,因为每个人只有一个出生日期。
多值属性(Multi-Valued Attributes):
- 多值属性可以包含多个值,用于表示一个实体的多个相关信息。例如,一个人可以有多个电话号码,每个电话号码就是一个多值属性,如phone_numbers。
派生属性(Derived Attributes):
- 派生属性是可以通过计算或基于其他属性的值来获得的属性。例如,一个人的年龄可以从其出生日期(date_of_birth)计算得出,因此年龄是一个派生属性。
在ER图中表示复杂属性
2. 设计阶段
- 需求分析
数据库设计者与领域专家和数据库用户协商去了解用户的数据需求
- 概念设计
将用户需求转换为实体关系模型(ER模型)
- 逻辑设计
设计师将实体关系数据模型映射到关系数据库模式。
- 物理设计
决定数据库的物理布局,包括文件组织形式和内部存储结构的确定。