****** 二十四 ******、软设笔记【数据库】-数据模型-关系模型、基本概念、规范化理论、范式
数据模型
一、关系模型
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
用表格结构表达实体集,用外键(外码)表示实体间的联系。
*优点:
>建立在严格的数学概念基础上
>概念单一,结构简单、清晰,用户易懂易用
>存取路径对用户透明,从而数据独立性、安全性好,简化数据库开发工作。
*缺点:由于存储路径透明,查询效率往往不如非关系数据模型。
二、基本概念
1.域
是一组具有相同数据类型的值的集合。
>整数
>实数
>{‘男’, ‘女’}
>.............
2.笛卡尔积
给定一组域D1,D2,...,Dn,这些域中可以有相同的。
D1,D2,...,Dn的笛卡尔积为:
D1 x D2 x ... x Dn = {(d1, d2, ... dn) | di 属于 Di, i= 1,2,..., n}
*所有域的所有取值的一个组合
*不能重复
3.关系
D1 x D2 x ... x Dn的子集叫做在域D1,D2,...,Dn上的关系,表示为
R(D1 x D2 x ... x Dn)
R:关系名
n:关系的目或度(Degree)
1.关系的表示
关系也是一个二维表,表单每行对应一个元组,表的每列对应一个域
2.属性
关系中不同列可以对应相同的域
为了加以区分,必须对每列起一个名字,称为属性(Attribute)
n目关系必有n个属性
3.候选码(Candidate key)
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
4.主码(Primary key)
若一个关系有多个候选码,则选定其中一个为主码
基本关系具有以下6个性质:
(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域,
(2)不同的列可出自同一域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
(3)列的顺序无所谓,即列的次序可以任意交换。
(4)任意两个元组不能完全相同。
但多数实际关系数据库产品中,例如Oracle等,如果用户没有定义有关的约束条件,它们都允许关系表中存在两个完全相同的元组,
(5)行的顺序无所谓,即行的次序可以任意交换。
(6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系的描述称为关系模式,关系模式是一个五元组,形式化地表示为:
R(U,D,DOM,F)
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
DOM 属性向域的映象集合
F 属性间的数据依赖关系集合
通常简记为R(A1,A2,...,An)。R为关系名,A1,A2...为属性名。
三、规范化理论
设有一个关系模式R(SNAME, CNAME, TNAME, TADDRESS),其属性分别表示学生姓名、课程名、任课教师姓名和任课老师地址。
这个模式存在下列存储异常的问题。
(1)数据冗余
(2)修改异常
(3)插入异常
(4)删除异常
把R分解成下列三个关系模式:R1(SNAME,CNAME)和R2(CNAME,TNAME),R3(TNAME, TADDRESS),则能消除上述的存储异常现象。
模式设计强调“每个联系单独表达”是一条重要的设计原则
四、范式
(1)第一范式(1NF)
如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式的模式,r是规范化的关系。
说明:在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
(2)第二范式(2NF)
若关系模式R是1NF,且每个非住属性完全函数依赖于候选键,那么称R是2NF模式。
简单的说,是表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式。
例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。
(3)第三范式(3NF)
如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选码,则称R是3NF。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。
那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
(4)BC范式(BCNF)
若关系R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF模式。
相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非主属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。
在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
每一个教师只教一门课。没门课由一名教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称:(S,J)=> T,(S,T) => J, T => J
一、关系模型
在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。
用表格结构表达实体集,用外键(外码)表示实体间的联系。
*优点:
>建立在严格的数学概念基础上
>概念单一,结构简单、清晰,用户易懂易用
>存取路径对用户透明,从而数据独立性、安全性好,简化数据库开发工作。
*缺点:由于存储路径透明,查询效率往往不如非关系数据模型。
二、基本概念
1.域
是一组具有相同数据类型的值的集合。
>整数
>实数
>{‘男’, ‘女’}
>.............
2.笛卡尔积
给定一组域D1,D2,...,Dn,这些域中可以有相同的。
D1,D2,...,Dn的笛卡尔积为:
D1 x D2 x ... x Dn = {(d1, d2, ... dn) | di 属于 Di, i= 1,2,..., n}
*所有域的所有取值的一个组合
*不能重复
3.关系
D1 x D2 x ... x Dn的子集叫做在域D1,D2,...,Dn上的关系,表示为
R(D1 x D2 x ... x Dn)
R:关系名
n:关系的目或度(Degree)
1.关系的表示
关系也是一个二维表,表单每行对应一个元组,表的每列对应一个域
2.属性
关系中不同列可以对应相同的域
为了加以区分,必须对每列起一个名字,称为属性(Attribute)
n目关系必有n个属性
3.候选码(Candidate key)
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
4.主码(Primary key)
若一个关系有多个候选码,则选定其中一个为主码
基本关系具有以下6个性质:
(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域,
(2)不同的列可出自同一域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
(3)列的顺序无所谓,即列的次序可以任意交换。
(4)任意两个元组不能完全相同。
但多数实际关系数据库产品中,例如Oracle等,如果用户没有定义有关的约束条件,它们都允许关系表中存在两个完全相同的元组,
(5)行的顺序无所谓,即行的次序可以任意交换。
(6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系的描述称为关系模式,关系模式是一个五元组,形式化地表示为:
R(U,D,DOM,F)
R 关系名
U 组成该关系的属性名集合
D 属性组U中属性所来自的域
DOM 属性向域的映象集合
F 属性间的数据依赖关系集合
通常简记为R(A1,A2,...,An)。R为关系名,A1,A2...为属性名。
三、规范化理论
设有一个关系模式R(SNAME, CNAME, TNAME, TADDRESS),其属性分别表示学生姓名、课程名、任课教师姓名和任课老师地址。
这个模式存在下列存储异常的问题。
(1)数据冗余
(2)修改异常
(3)插入异常
(4)删除异常
把R分解成下列三个关系模式:R1(SNAME,CNAME)和R2(CNAME,TNAME),R3(TNAME, TADDRESS),则能消除上述的存储异常现象。
模式设计强调“每个联系单独表达”是一条重要的设计原则
四、范式
(1)第一范式(1NF)
如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式的模式,r是规范化的关系。
说明:在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
(2)第二范式(2NF)
若关系模式R是1NF,且每个非住属性完全函数依赖于候选键,那么称R是2NF模式。
简单的说,是表中的属性必须完全依赖于全部主键,而不是部分主键。所以只有一个主键的表如果符合第一范式,那一定是第二范式。
例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。
(3)第三范式(3NF)
如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选码,则称R是3NF。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。
那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
(4)BC范式(BCNF)
若关系R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF模式。
相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非主属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。
在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。
每一个教师只教一门课。没门课由一名教师教,某一学生选定某门课,就确定了一个固定的教师。某个学生选修某个教师的课就确定了所选课的名称:(S,J)=> T,(S,T) => J, T => J