关系型数据库及其设计方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系型数据库及其设计方法
1.1 理解关系型数据库
数据库是什么?数据库就是一些长期存储的数据信息的集合。“数据库”是由数据库管理系统管理(DBMS)的数据的集合。一个数据库管理系统需要满足以下的要求:
1、允许用户使用数据定义语言(DDL)建立新的数据库并且指定它们的模式(Schema)。
2、允许用户能够用适当的语言查询数据和更新数据。
3、支持存储大的数据,经过很长一段时间后,仍保证安全,使其对数据库查询和更新的有效访问。
4、控制多用户的同时访问,是一个用户的访问不影响其它用户,保证同时访问不会损坏数据。
1.2 关系模型的建立
关系型数据库理论出现于20世纪70年代。1970年,IBM的研究员E.F.Codd博士发表了《大型共享数据银行的关系模型》一文,提出了关系模型的概念。后来,他的几篇补充文章,奠定了关系数据模型的基础,即关系数据库的基础。
关系数据模型是以集合论中的关系概念为基础发展起来的。
几个概念:关系模型中无论是实体还是实体间的联系均由单一的结构类型--关系来表示。在实际的关系型数据库中的关系也成为表,一个关系型数据库由若干个表组成。
1.3 CODD准则
1.4 SQL语言的产生和发展
1.5 关系型数据库管理系统的基本术语
表是关系型数据库的基本组成单元,它是一种直观组织数据的方法。
表由行和列组成。即数据表中的“行”和“列”,或者称为“记录”和“字段”。
表中所示的数据是一个简单的雇员信息表。
这个简单的表格描述了关系型数据库中最重要的两个必要条件,即:
关系数据库中的所有数据在逻辑层明确地表示为表中的值。
每个数据元素可以通过使用主键名、主键值、表名和列名的组合进行逻辑访问。
2.1 表之间的关系
关联是不同表之间的数据彼此联系的方法。关联同时存在于形成不同实体的数据项之间和表实体本身之间,构成了数据库规范化的基本核心问题。数据关联有三种基本类型:
1、一对一关联
例如:一个学校只能有一个校长。一个人的身份证号码和这个人唯一关联。
2、一对多关联
例如:一个人可能没有小孩,也可能有一个或者多个小孩。
3、多对多关联
例如:学生和课程之间就是多对多的关系。也就是说:一个学生可以选多门课程,而一门课程又可以同时被多个学生选择。在进行数据库设计时需要通过一个中间表,也就是学生选课信息表来描述学生和课程之间的关系。
在实际中,遇到的大多数实体之间都是多对多的关系。而这种关系是无法直接用数据库进行描述的。那么就需要将多对多的关系拆分成两个一对多的关系进行处理。
2.2 关系型数据库的范式化
构造数据库必须遵守一定的规则,在关系型数据库中,这种规则就是范式。
范式:就是符合某一种级别的关系模式的集合。
范式化:就是按照范式法则将数据库中的数据进行组织的过程。
使用范式的目的:消除数据冗余,保持数据的一致性。
范式的种类:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和修正的第三范式(BCNF)。
2.3 第一范式
第一范式(1NF)要求:
1、数据库中的数据项(表中的每一列)是不可分割的基本数据项
2、同一列中不能有多个值
3、在数据表中每一行只能包含一个实例的信息。
4、所有的记录具有相同的字段个数。
例如:对于员工信息表,不能将员工信息都放在一个列中显示,也不能将其中的两列或者多列放在一列中显示;员工信息表的每一行只能表示一个员工的信息,一个员工的信息在表中只出现一次。即,第一范式要求无重复的列。
2.4 第二范式
第二范式(2NF)要求:
1、必须满足第一范式
2、表中不包含与主键无关的信息。换而言之,就是要求数据表中非主键的列要有主键来唯一决定。
非主键的列要与主键的全部发生依赖关系,即不能只与主键的部分依赖。
例如:
存在一个学生选课程的关系表:SCI(SNO,CNO,GRADE,CREDIT)
SCI(学号,课程号,成绩,学分)
根据以上条件,选取SNO和CNO两个字段作为组合关键字。
---------------------------------------------------
SNO CNO GRADE CREDIT
---------------------------------------------------
04020304 12345 98 4
04020304 12346 99 3
04020305 12345 96 4
04020305 12346 99 3
04020306 12347 97 3
04020306 12347 95 3
---------------------------------------------------
在应用以上关系模式中存在以下的问题:
⎽存在着数据冗余。假设同一门课程有40个学生选修,因为每门课程的学分是固定的,那么每门课程的学分就需要重复保存40次。
⎽可能存在更新异常,导致数据发生不一致的现象发生。如果调整了某课程的学分,相应的元组CREDIT 的值都需要更新,这时就有可能出现同一门课程学分不同的情况发生。
⎽存在插入异常现象。如计划开一门新课,但由于没有人选修,就没有学号关键字,只能等有人选修时才能把课程和学分存入。
⎽存在删除异常现象。若学生已经结业,将从当前数据库中删除这些学生的选修记录。而这是某些课程新生尚未选修,则此门课程及学分记录将无法保存。
分析问题的原因:
非关键字属性rCREDIT(学分)仅仅依赖于课程编号(CNO)而与学生编号(SNO)无关。
解决的方法:
对上面的表进行拆分:即形成两个数据表,一张是学生信息表SC,SC(SNO,CNO,GRADE),另一张表为:课程信息表COURSE,COURSE(CNO,CREDIT)
这两张表通过课程编号(CNO)进行关联。
学生信息表(SC)
---------------------------
SNO CNO GRADE
---------------------------
04020304 12345 98
04020304 12346 99
04020305 12345 96
04020305 12346 99
04020306 12347 97
04020307 12347 95
---------------------------
课程信息表(COURSE)
------------------
CNO CREDIT
------------------