网站首页 > 文章精选 正文
关系数据库设计的核心是关系模式的设计,规范化理论是关系数据库的重要理论基础,是关系数据库模式设计的指南和工具。
学习规范化理论产生的背景,了解规范化问题是如何被提出的。
一、模式概念回顾
回顾几个关于模式的概念:
关系:描述实体、属性和实体间的联系,从形式上看,关系就是一张二维表;
关系模式:用来定义关系;(就相当于是这种二维表的表头)
关系数据库:基于关系模型的数据库,利用关系来描述现实世界,从形式上看是由一组关系组成;
关系数据库模式:定义这组关系的关系模式的全体。(可以看做所有二维表的表头组成关系数据库的模式。)
关系模式的一般形式:R(U, D, DOM, F) (一般情况下,一个关系模式可以用一个五元组来表示。)
R ==>关系名
U ==>全部属性集合
D ==>属性所来自的域的集合
DOM==>属性向域的映象集合
F ==>属性间数据的依赖关系集合
主要讨论的即与关系模式设计相关的主要是R、U、F,因此把关系模式用一个简单的三元组R(U,F)来表示。
二、泛关系模式存在的问题
对于描述一个现实世界的问题,可以设计出多个不同的关系模式,哪个模式更好、或者说如何去设计一个合理的关系数据库模式?
例如对于学生选课问题,设计一个关系数据模型以存放学生各门课考试成绩。可以设计多种情况,有多个答案。
有若干答案:
1)三个模式组成:
STUDENT关系:(sno,sname)学生关系:存储学生的基本信息;
COURSE关系:(cno,cname)课程关系:存储课程的基本信息;
GRADE关系:(sno,cno,grade)成绩关系:存储某一个学生选了某一门课的成绩信息。
2)两个模式组成:(将学生关系和成绩关系合并成了一个关系)
GRADE关系:(sno,sname,cno,grade)学生成绩关系:给出了学生的基本信息以及选课的基本信息;
COURSE关系:(cno,cname)课程关系:存储课程的基本信息。
3)一个模式:(将上述的所有属性合在一起组成一个关系模式)
GRADE关系:U={sno,sname,cno,cname,grade}
我们称3)为泛关系模式,它把现实问题的所有属性组成一个关系式,这是最简单的一个情况。
从上图的泛关系模式的具体的示例中可以看出,某一个学生叫什么名字、选了什么课、课程名是什么、他的成绩是多少。
泛关系模式存在的异常现象、存在的问题:
(1)数据冗余;(如果学生的记录变得很多、或者课程变得很多、或者是每一个学生的属性、课程的属性都增加,那么数据会出现大量的冗余的情况。)
(2)插入异常;(由于在泛关系模型可以看到,候选键是学号和课程号;那么,如果某一个学生没有选课的话,就没有办法将数据插入到表中。)
(3)更新异常;(如果对某一个数据进行更新的话,就需要更新多行。)
(4)删除异常;(如果想要删除掉学生s1的所有的选课信息,那么s1他本身的学生信息也会一并被删除,造成删除的异常。)
产生问题的根本原因:是存在属性间的各种函数依赖关系。
属性间约束关系(即数据间的依赖关系)太强。
解决泛关系存在的上述异常现象的方法:通过模式分解来把不合理的属性间的依赖关系去除,这个过程被称为关系的规范化设计。
以上述泛关系实例为例,解决问题的方法: 分解关系。
可以将其分解为三个关系-学生关系、课程关系、选课关系。这样,冗余就会大幅减少插入异常现象也不会出现,删除异常、更新异常也被解决。
三、总结
关系数据库设计的核心是关系模式的设计。关系模式的设计就是按照一定的原则从数量众多而又相互关联的数据中,构造出一组既能较好地反映现实世界、而又有良好的操作性能的关系模式。
对于规范化来说,要解决的主要问题是:
(1)怎样评价关系模式的优劣。
(2)怎样将一个关系模式分解为一组较理想的关系模式。
- 上一篇: 5G NR 随机接入(3)—PRACH时频资源
- 下一篇: 第1章关系数据库的规范化和数据库的体系结构
猜你喜欢
- 2025-01-06 9大数据库性能优化方案详解(图文全面总结)
- 2025-01-06 数据总线是否就是ESB服务总线,从企业应用集成场景说起
- 2025-01-06 数据标准是什么?企业如何做好数据管理?
- 2025-01-06 数据库的常见的反规范化技术
- 2025-01-06 项目标准化建设之数据库设计说明书
- 2025-01-06 影响数据库性能的因素有哪些?
- 2025-01-06 统计规范化管理对企业影响是深远而全方位的
- 2025-01-06 积攒十五年的MySQL数据库设计经验,拿走不谢
- 2025-01-06 海南热带海洋学院专升本-数据库试题及答案(二)
- 2025-01-06 数据规范化方法
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)