模式设计
大家还记得什么是物理模式、概念模式和外部模式吗?
如何设计好的概念模式?这就要用到E-R模型。
E-R(Entity-Relationship)模型:
- 定义了数据库的概念模式
- 反映了现实世界中实体和它们之间的关联(数据库中表的结构和关系)
- 有助于确保数据库能够有效地存储和管理数据
基本概念
实体(Entity)
实体:
- 是现实世界的对象,很容易识别,可以是有生命,也可以是无生命
- 是对象的抽象,而实体集是该对象实例的集合
- 都有一些赋予它们身份的属性
例如,在学校数据库中,可以将学生、教师、班级和提供的课程视为实体。学生集合可以包含一个学校的所有学生。
属性(Attributes)
属性:
- 表示一个实体。例如,学生实体可以将姓名、班级和年龄作为属性。
- 有合理的类型和值。例如,学生的姓名不能是数字,学生的年龄不能是负数等等。
属性的类型包括:
- 能不能分割:
- 简单属性:原子值,不能再分。例如,学生的电话号码是10位数字的原子值。
- 复合属性:由多个简单属性组成。例如,学生的完整姓名可能包含姓和名。
- 是不是原生:
- 原生属性:数据库中存在的属性。例如,学生的生日。
- 派生属性:数据库中不存在的属性,从存在的其它属性派生出来的属性。例如,年龄可以从生日派生出来。再比如,一个班级的平均年龄不应该直接保存在数据库中,而是应该计算出来的。
- 是不是唯一:
- 单值属性:单值属性包含单个值。例如,学生的学号。
- 多值属性:多值属性可以包含多个值。例如,一个人可以有多个电话号码。
当然,这些类型可以组合在一起使用:
- 简单 - 单值属性
- 简单 - 多值属性
- 复合 - 单值属性
- 复合 - 多值属性
实体集和键(key)
键是在实体集中,用于唯一标识一个实例的属性或属性集合。
例如,学生的学号可以唯一标识一名学生。
- 超键:一个或多个属性的集合,用于标识实体集中的一个实例。
- 候选键:最小规模的超键称为候选键。一个实体集可以有多个候选键。
- 主键:从候选键里挑选,用于唯一标识实体集。
例如,假设有一个学生实体:{学号,姓名,地址,电话号码,特长},其中:
- 超键,{学号}和{姓名,地址,电话号码}都是
- 候选键,{学号}和{姓名,地址}都是
- 主键,{学号}或者{姓名,地址}挑一个
关系(Relationship)
关系:
- 表示实体之间的关联。例如,一个员工在一个部门工作,一个学生注册了一门课程,这里的工作和注册都是关系。
- 也可以有属性,成为描述性属性。
关系的度:
- 由参与关系的实体的数量决定,可以分为:
- 2度,两个实体参与 --> 二元关系
- 3度,三个实体参与 --> 三元关系
- N度,N个实体参与 --> N元关系
关系基数:
- 由一个实体集中的实体实例数量,与另一个实体集中的实体实例数量的关联情况决定
- 可以分为:
- 一对一:实体集A中的一个实体实例只能与实体集B中的一个实体实例相关联,反之亦然。
- 一对多:实体集A中的一个实体实例可以与实体集B中的多个实体实例关联,而实体集B中的一个实体实例最多只能与实体集A中的一个实体实例关联。
- 多对一:实体集A中的多个实体实例只能与实体集B中的一个实体实例相关联,但实体集B中的一个实体实例可以与实体集A中的多个实体实例相关联。
- 多对多:实体集A中的一个实体实例可以关联到B中的多个实体实例,反之亦然。
ER图
接下来,讨论一下如何用ER图表示ER模型。实体、实体的属性、关系集和关系集的属性,都可以在ER图中表示。
实体和属性
实体和属性的表示方法:
- 实体用矩形表示,例如Student
- 属性用椭圆表示,每个椭圆代表一个属性,属性直接连接到实体上,例如Name
- 如果属性是复合的,则将它们进一步划分为树状结构。例如Name由FirstName和LastName组成
- 多值属性用双椭圆表示,例如PhoneNo.
- 派生属性用虚线椭圆表示,例如Age
关系
关系的表示方法:
- 关系由菱形框表示,关系的名称写在菱形框内
- 所有参与关系的实体都通过一条线连接到它
二元关系(度数为2的关系)和基数的表示方法如下:
参与约束,根据实体实例参与情况,可以分为:
- 完全参与 :每个实体实例都参与到关系中,用双线表示。
- 部分参与 :不是所有实体实例都参与到关系中,用单线表示。
泛化与特化
ER模型可以表达处于不同抽象层次的实体。越往上走,抽象层次越高,称之为泛化。相对的,越往下走,抽象层次越低,称之为特化。
例如,Person是高层次抽象,Student和Teacher是低层次抽象,Student和Teacher都属于Person,这是泛化过程,Persion包含Student和Teacher是特化过程。
继承:
- 是泛化和特化的一个重要特征
- 允许低级实体继承高级实体的属性。例如,Person的属性(Name, Age和Gender)可以被Student或Teacher继承
总结
使用ER模型究竟能带来什么好处呢?
- 数据建模的标准化方法:标准化意味着便于沟通,并与让不同的利益相关者(例如业务分析师、数据库设计人员和软件开发人员)达成共识
- 易于理解和沟通:ER图非常直观,对于非技术人员也能很好理解,有助于促进业务和 IT 部门之间的协作,确保数据模型满足业务需求
- 数据库设计的坚实基础:ER 模型可以转换为各种数据库模式,包括关系数据库、NoSQL 数据库和面向对象数据库
- 支持复杂的数据结构:ER 模型支持各种建模概念,包括复合类型、继承和聚合,便于对复杂的数据结构进行建模
此外,从数据管理的角度来讲,还有以下好处:
- 减少数据冗余:ER 模型有助于识别和消除冗余数据,提高数据质量并减少存储空间
- 提高数据完整性:ER 模型中的约束有助于确保数据完整性
- 支持应用程序开发:ER 模型可以作为应用程序开发的基础,有助于确保应用程序与底层数据库结构保持一致
更多例子
下面的图能看懂了吗?
医院的ER模型
公司ER模型
如果喜欢这篇文章,请不要忘记关注、点赞和收藏哦!
您的鼓励将是我创作的最大动力!