3.1数据库概念设计
分为概念设计,逻辑设计,物理设计
概念设计是数据库设计的核心环节,是独立于具体DBMS的模型
3.1.1数据库概念设计的任务
数据库概念设计阶段的目标是:
- 定义和描述应用领域涉及的数据范围
- 获取应用领域或问题域的信息特征
- 描述清楚数据的属性特征
- 描述清楚数据之间的关系
- 定义和描述数据的约束
- 说明数据的安全性要求
- 支持用户的各种数据处理需求
- 信息模式可以转换为数据库逻辑模型(即数据库模型)
3.1.2概念设计的依据及过程
依据:根据需求分析的结果为依据,即需求说明书、DFD图等等
结果:概念设计的结果是概念模型(ER)与概念设计说明书
过程:
- 明确建模目标(模型覆盖范围)
- 定义实体集(自底向上标识和定义实体集)
- 定义联系(实体间关联关系)
- 建立信息模型(构造ER模型)
- 确定实体集属性(属性描述一个实体的特征或性质)
- 对信息模型进行集成与优化(检查和消除命名不一致、结构不一致等等)
概念数据模型(ER)是对现实世界的抽象和模拟
3.1.3 ER建模方法
(Entity Relationship model)
- 实体(实例) 实体指客观存在可相互区分的事物
- 实体集 实体集描述一个现实和抽象的事物集合
- 属性 属性用于描述一个实体集的特征和性质,每个属性的取值范围称为域
- 码 实体集中能唯一标识每一个实例的属性或属性组
- 联系 联系描述现实世界中实物之间的关系 联系也可以有属性
实体间的联系有三类
- 1对1
- 1对n
- n对n
绘制
属性:用椭圆
联系:用菱形
实体/实体集:用矩形
主码:就是在椭圆中写的属性名下面加多下划线
3.2数据库逻辑设计
3.2.1目的
将概念模型(ER)转换为DBMS支持的数据模型(如关系模型),并对其进行优化
3.2.2 补充概念
1.关系模型
数据模型包括三种关系模型,网状模型,层次模型
关系模型使用二维表格结构描述实体与实体之间的联系的模型
关系的描述称之为关系模式,关系模式由五部分组成,即它是一个五元组 R(U,D,DOM,F)
其中R:关系名,U:组成该关系的属性名集合 D:属性组U中的属性所来自的域(取值范围)
DOM :属性到域的映射(属性怎么得到取值范围的) F:属性组U上的一组数据依赖
由于D,DOM没啥用,简化为R<U,F>,当且仅当U上的一个关系R满足F时,R称之为关系模式R<U,F>的一个关系
2.数据依赖
定义:
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性相等,而在Y上的属性值不相等,称之为“X函数确定Y”或“Y函数依赖于X”记作X→Y
即唯一X确定唯一Y
关系内部属性与属性之间的一种约束关系
函数依赖
eg:
学校里面 学生(学号,姓名,年龄,宿舍号)
学号可以唯一确定某一个学生实体,学号确定了,宿舍号和年龄和姓名就确定了,因此称姓名,年龄,宿舍号函数依赖于学号,但反过来宿舍里一般不止你一个吧,所以宿舍号不能确定学号(一个人住除外,杠精绕路)
此处额外提出一点,例如学生里面的属性
(学号,姓名,年龄,宿舍号)→ 学号 称为平凡函数依赖
(学号,姓名,年龄,宿舍号)→ 年级 称为非平凡函数依赖
就是在不在括号里面,即是不是该实体的属性
完全函数依赖和部分函数依赖
(学号,姓名,年龄,课程号)→ 课程成绩 称为课程成绩部分函数依赖
(学号,课程号)→ 课程成绩 称为课程成绩完全函数依赖
因为课程成绩(某个人的课程成绩)只和课程号(上啥课)学号(谁)有关,和你几岁,名字(因为名字可能重复)叫啥没关系,所以相反的都有关系就是完全函数依赖
传递函数依赖
学号 → 班级号 班级号 → 所在系号
学号→ 所在系号 称作所在系号传递函数依赖学号
这就不用赘述了吧,都看得懂吧(A推出B,B推出C,所以A推出C,只不过这里是间接推出嘛,这里叫传递嘛)
补充!!!传递函数依赖是完全函数依赖的一种!!!
多值依赖
3.候选码、主码、外码
码:能唯一确定的属性值(没有重复的)
候选码:某属性组的值能唯一确定整个元组的值,则称该属性组为候选码(一堆码构成)
主码:候选码可能有多个,选择一个为主码
外码:既不是主码也不是候选码,但是是另外一个关系模式的码
4.数据规范化
关系模式的规范化理论:把一个低一级的关系模式分解为高级关系模式的过程
关系模式的规范化主要是由关系范式来完成
↓ ← ← ← ← ← ← ← ← ↓
↓
5 .范式
范式:关系模式满足的约束条件称为范式。根据满足规范化的程度不同,范式由低到高分为1NF,2NF,3NF,BCNF,4NF,5NF
1NF:如果关系模式R,其所有属性都是不可再分的基础数据项,则称R属于第一范式(1NF),R 1NF
eg:
学生信息 R (学号 ,身份 ,年龄)
学号 身份 年龄
01 女大三学生 22
02 女大一学生 18
03 男大四学生 22
注意这个“身份”,身份包括了性别和年级,是可再分的数据项,所以它不是第一范式
2NF:如果关系模式R 1NF,且每个非主属性都完全函数依赖于主码,则称R属于第二范式,R 2NF
eg:
学生信息R(学号 ,姓名,年龄,课程号,课程名称,成绩,课程设置学分)is 2NF???
主码:(学号,课程号) (这两个是唯一的)
其他:(姓名,年龄,课程名称,成绩,课程设置学分) 非主属性
显然易见 学号→(姓名,年龄) 和课程号无关
PS:你叫啥和你上啥课有啥关系???一堂课那么多人,一个课程号对应多少人的姓名啊
课程设置学分 → 课程号 ps:你学号多少都影响不了学校设置的学分。。。
综上所述,非主属性都要能由主码唯一确定,也就是它们之间有唯一确定的关系
所以R不满足第二范式
3NF:如果关系模式R 2NF,且每个非主属性都 不 传递函数依赖于R的主码,则称R属于第三范式,R 3NF
eg:
学生信息R(学号,姓名,年龄,所在学院,学院地点,学院电话) is 3NF???
很显然 这个关系里面所有的属性都函数依赖于学号,但是,学院电话函数依赖于学院号,学院号函数依赖于系号,系号函数依赖于学号,因此学院电话传递函数依赖于学号
同样的BCNF在3NF的基础上消除了部分函数依赖,4NF在BCNF的基础上消除了非平凡函数依赖和多值函数依赖
3.2.3数据库逻辑模型的产生
概念模型按照一定规则可以转换为数据模型,这种转换规则如下:
- 一个实体转换为一个关系模式
- 一个1:1的联系可转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并
- 一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的模式合并
- 一个m:n联系转为为一个关系模式
- 三个或三个以上实体间的一个多元联系转换为一个关系模式
- 同一实体集的实体间的联系,也可以按1:1、1:N和m:n三种情况分别处理
③1:n