数据库八股文——E-R模型
E-R 模型
数据模型概述
数据库结构的基础是数据模型,它是描述数据(数据结构)、数据之间的联系,数据语义即数据操作,以及一致性(完整性)约束的概念和工具的集合。
概念数据模型 | 逻辑数据模型 | 物理数据模型 |
---|---|---|
实体(Entity) | 实体(Entity) | 表(table) |
-- | 属性(Attribute) | 列(Column) |
-- | 标识符(Primary/Foreign Identifier) | 键(Primary/Foreign Key) |
关系 | 关系(Relation) | 参照完整性约束(Reference) |
E-R 模型的基本元素
实体(Entity)
一个实体(Entity)可以表示对于组织机构的业务非常重要的事物及其相关的信息集合,实体一般用集合名词或名词词组来表示,因此,实体也被称为实体集(Entity Set)。
实体实例(Entity Instance)
实体实例是实体的一个具体出现,或者说是实体的一个具体的记录值。
属性(Attribute)
一个实体的所有实体实例,都具有相同的性质特征。使用属性来描述实体的性质特征,就像类内的属性一样。实体具有哪些属性,是根据用户对信息的需求来决定的。
实体的标识符
在描述实体的属性中,存在一组属性(可以是单个属性,也可以是多个属性),使用这组属性的特征,可以唯一地标识客观世界中的特定实体实例。如果这组属性不可约(减少任何一个属性),就不能再唯一地标识这个特定实体实例,那么我们说,这组属性是候选的实体的标识符(Identifier)。
一个实体可能有多个候选的实体标识符。选择其中一组作为该实体的主实体标识符(Primary Identifier),其余的候选的实体标识符称为辅助的实体标识符(Auxiliary Identifier)。
- 选择在实体实例的生命周期内不会被改变其值的属性作为标识符
- 选择实体实例中有有效值且不为空(或未知)的属性作为标识符。如果标识符是个复合属性,则 要确保组成标识符的所有属性的属性值都有效
- 避免使用可以表示分类、位置信息等所谓的智能标识符(或键)
- 尽量使用单一属性代理标识符替代复合属性标识符
属性的分类
E-R 模型中的属性可以不是原子值,原子值指简单属性 + 单值属性。
简单属性/复合属性 Simple Attribute / Composite Attribute
简单属性:不能划分为更小部分的属性
复合属性:由若干个有意义的详细属性组合成的属性
例如:
年龄是一个简单属性,因为其不能再划分为更小的部分
简历是一个复合属性,因为其可以继续分成姓名、年龄、学历等属性
单值属性/多值属性 single-valued / multi-valued
单值属性:属性对一个特定实体都只有单独的一个值
多值属性:属性对某个特定实体而言,可能对应于一组值
用 {} 将属性名包起来表示该属性为多值属性
例如:
学号是一个单值属性,因为每一个实体实例只能拥有一个学号
手机号是一个多值属性,因为每一个实体实例可以拥有多个手机号
必要属性/可选属性 Mandatory Attribute / Optional Attribute
必要属性:每个实体实例必须存在的属性
可选属性:每个实体实例可以为空值的属性
身份证号是一个必要属性,因为身份证号必须填写
性别是一个可选属性,因为性别可以不填写
存储属性/派生属性 Stored Attribute / Derive Attribute
派生属性:值从别的相关属性或实体派生出来
存储属性:不属于派生属性
派生属性可以定期计算并存储,也可以完全不存储,等需要时计算。
出生年份是一个派生属性,因为出生年份可以通过当前日期减去年龄算出
年龄是一个存储属性,因为它不是派生属性
复杂属性 Complex Attribute
复杂属性:复合属性和多值属性通过嵌套方式组合构成
用 () 将复合属性的各个组成部分包起来,用逗号分隔。
联系
联系是客观世界中,事物内部或者事物之间的规则。数据规则表示的是数据间如何关联,行为规则表示当属性为某个特殊值时,应当进行何种操作。E-R模型可以建模数据规则,但不能建模行为规则。
结构完整性规则(基数约束规则)
最大基数约束规则
一个联系的最大基数是指:实体 B 中的实体实例可以和实体 A 中的实体实例发生关联的最大个数
- 一对一
- 一对多/多对一
- 多对多
- 一个教师只能指导一个学生,一个学生只能被一个教师所指导
- 一个教师可以指导多个学生,一个学生只能被一个教师所指导
- 一个教师可以指导多个学生,一个学生可以被多个教师所指导
最小基数约束规则
一个联系的最小基数是指:实体 B 中的实体实例可以和实体 A 中的实体实例发生关联的最小个数。
- 部分参与
- 完全参与
- 一个教师可以指导学生,也可以不指导学生
- 一个教师至少指导一个学生
参照完整性约束规则
参照完整性约束规则确保属性取值的有效性,只能取所参照的实体对应属性中存在的值。
参照完整性大多是人为规定的,不能在 E-R 模型中表示出来。
联系实例
联系和联系实例类似于实体和实体实例
- 人类是一个实体,陈髋髋是一个实体实例
- 老师指导学生的指导是一个联系,陈宽宽老师指导陈髋髋学生是一个联系实例
联系的描述性属性(关联)
联系的描述性属性描述联系本身的特征,联系的属性本身不属于任何一个实体,仅仅用来描述联系的特征。
关联本身没有标识符,关联适合用来建模一次性的联系,而不是多次同类的联系。例如老师和学生之间的指导关系,教师成为学生的导师可以使用关联描述(是导师/不是导师),成为导师后多次指导学生,每次指导过程为同类联系,不能用关联建模。
联系的度
联系的度指参与联系的实体的个数,称为 n 元关系。
关联实体
联系是一个动词,关联实体是一个动名词。
教师指导学生做项目是一个三元关系,其中三个实体是教师、学生、项目。
将指导行为转变成指导活动,将三元关系转换成三个二元关系。
本质是将关联提升为一个关联实体,关联实体是由行为动作名词化而抽象出来的实体。此时,关联实体具有一个自己的标识符。
实体参与联系的角色
当参与一个联系的多个实体名字不同时,角色是隐含的
当参与一个联系的多个实体名字相同时,需要为实体集指定参与联系的角色名
- 递归联系:课程和课程的先修/后修关系
- 同一组实体之间的多种联系:员工和企业的工作/股份关系
强实体和弱实体
弱实体集是指在数据库中不能独立存在的实体集,它的存在依赖于另一个称为“强实体集”的实体集。弱实体集没有主键属性(Primary Key),而是通过与强实体集的关系以及自身的部分属性(称为部分键)来唯一标识其实体。
弱实体集特点:
- 依赖性:弱实体集依赖于强实体集存在。每个弱实体都必须与一个强实体关联,才能存在。
- 部分键:弱实体集使用部分键(Partial Key)来区分不同的弱实体。部分键在弱实体集内部是唯一的,但不能单独作为唯一标识符,需要结合强实体集的主键一起使用。
- 标识关系:弱实体集和强实体集之间存在一种称为标识关系(Identifying Relationship)的特殊关系。这种关系帮助弱实体集通过引用强实体集的主键来唯一标识自身的实例。
E-R 图中,用双矩形框表示弱实体,标识关系用双菱形标识,部分键用虚线下划线表示。
在关系数据库中,弱实体集通常通过外键约束来实现,确保弱实体集中的实体只能在与强实体集关联时存在。