一、引言
前面学习了关系数据库的基本概念,关系模型的组成要素,关系数据库的标准查询语言SQL
三部分的内容,为了使得关系模式设计能够有一个标准,Codd提出了指导关系模式设计的规范
理论
二、为学生选课数据库添加院系表
1、添加院系表,包含院系名称和院系主任两个属性
院系表(院系名称,院系主任)
D(DN,DD)
(1)创建表
create table d(dN varchar(16) primary key,dD varchar(6)
);
(2)为表中添加数据
insert into dvalues('数计学院','张三');
insert into dvalues('材料学院','李四');
insert into dvalues('机械学院','王麻子');
(3)为表s中的sD属性添加外键参照表d中的dN属性
alter table s
add foreign key(sD) references d(dN);
三、一个关系模式R的数据库模式和有着多个关系模式(S,C,SC,D)的数据库模式,哪一个更好?
R(SNO,CNO,SN,SEX,SB,SD,CN,PC,GRADE,DD)
1、创建表R
create table r(
sNo char(12),
sN varchar(6),
sex char(2),
sB date,
sD varchar(16),
dD varchar(6),
cNo char(3),
cN varchar(16),
pC char(3),
grade decimal(3,1),
primary key(sNo,cNo)
);
2、在表R中通过连接查询插入学生选课数据库中的相关信息
insert into r
select s.sNo,sN,sex,sB,sD,dD,sC.cNo,cN,pC,grade
from s,d,c,sC
where s.sNo=sC.sNo and s.sD=d.dN and c.cNo=sC.cNo
从表R中可发现存在着冗余存储的问题,学生学号、学生姓名、所在学院、学院主任均被存储了多3、对关系R进行更新操作
(1)向关系表R中插入一个学生信息
insert into r(sNo,sN,sex,sB,sD)
values('202218014034','李世民','男','1900-01-01','机械学院')
(2)向关系表R中插入一个课程信息
insert into r(cNo,cN,pC)
values('011','机械组装','001');
(3)向关系表R中插入一个院系信息
insert into r(sD,dD)
values ('体育','苏炳添')
(4)删除学号为“202218014032”的学生的选课信息(该生只选修了一门课程)
方式一:
update r
set cNo=null,cn=null,pC=null,grade=null
where sNo='202218014032'
语句报错,无法执行
方式二:使用DELETE语句删除整个元组
delete
from r
where sNo='202218014032'
这样做虽然满足了操作需求,但会将关于该学生的所有信息一并删除,丢失了学生的个人信息
(5)修改一个学生的所在系
update r
set sD='机械学院'
where sNo='202218014030'
select sD,dD
from r
where sD='机械学院'
出现数据不一致问题
4、可以看到,把四个关系模式合成为一个关系模式,不仅存在着数据冗余浪费存储空间,还会出现在原有数据库的多个关系数据模式上不会发生的更新异常和数据不一致问题 ,由此可见,关系模式R并不是一个好的关系模式,把几个关系模式合成为一个关系模式后,属性间增加了一些可能产生问题的数据依赖
四、数据依赖
1、定义
(1)关系模式的表达式:
R(U,D,Dom,F)
R:关系名
U:组成该关系的属性集合
D:属性组U中属性所来自的域
Dom:属性向域的影像的集合
F:属性间数据的依赖关系集合
(2)数据依赖是关系模式的要素,是一个关系的属性与属性之间的一种约束关系,反应的是现实世界事物特征间的一种依赖关系,是数据内在的特性,是语义的体现。
(3)由于关系模式中的域和属性向域的映射两个要素对设计关系模式的作用不大,在讨论关系模式的规范化设计时,一般把关系模式简化为R(U,F),在单独提出F时,关系模式还可以简化为R(U)
2、分类
属性间常见的数据依赖有以下三种:
(1)函数依赖
(2)多值依赖
(3)连接依赖
五、关系模式规范化的理论基础-ARMSTRONG公理及相关概念、实现不同规范化目标的模式分解算法等
六、关系数据库模式的学习思路
(1)什么是“好”的关系数据库模式
(2)如何评价“好”的关系数据库模式
(3)如何设计“好”的关系数据库模式