`

数据库中的关系、范式、索引

阅读更多
1.关系:是一个已命名的二维数据表。每个关系(表)包含一组已命名的列,以及任意数目的未命名的行。
关系的性质:
(1)数据库中每个关系(表)的名字是唯一的
(2)任意行的任一列值是原子的(单值)。在关系内,不允许有多值属性。即行列相交只能对应一个值,不能有几个值。
(3)每一行是唯一的,同一关系内的任意两行都不能相同。
(4)表中的每个属性(列)的名字是唯一的。
(5)关系中行,列的顺序都是无关的。
2.规范化
规范化是将含有异常的关系分解为更小的、良构的关系的过程。
规范化可以分为几个阶段来实现和理解,每个阶段都对应有一个范式。
范式是根据函数依赖(或是属性间联系)对关系应用某些简单准则后所得到的关系状态。
第一范式:任何多值属性都被去除,表中所有行与所有列交叉处都只有一个值
第二范式:所有部分函数依赖都被去除
第三范式:所有传递依赖都被去除。
3.相关概念
函数依赖:是存在于两个属性或两个属性集之间的约束。对任意关系R,当以下条件成立时,我们称属性B函数依赖于属性A:对于任意的有效地属性A的实例,它的值唯一决定B的值。B对A的函数依赖可以用箭头表示如下:A->B。
部分函数依赖:是这样一个函数依赖,关系中的一个或多个非键属性函数依赖于部分主键。
传递依赖:是在两个或多个非键属性间的函数依赖
4.索引
索引也是一张表,它包含有两列,键和包含该键值的记录或记录组的位置。
5.数据库优化
①调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
②调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
③调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
④调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。
⑤调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
⑥调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。
=================================
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍。在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手。
第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系。例:如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)规范成为1NF有三种方法:

一是重复存储职工号和姓名。这样,关键字只能是电话号码。

二是职工号为关键字,电话号码分为单位电话和住宅电话两个属性

三是职工号为关键字,但强制每条记录只能有一个电话号码。

以上三个方法,第一种方法最不可取,按实际情况选取后两种情况。
第二范式(2NF):如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称关系R 是属于第二范式的。

例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。由以上条件,关键字为组合关键字(SNO,CNO)

在应用中使用以上关系模式有以下问题:

a.数据冗余,假设同一门课由40个学生选修,学分就重复40次。

b.更新异常,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会出现同一门课学分不同。

c.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。

d.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。

原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。

解决方法:分成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新关系包括两个关系模式,它们之间通过SC1中的外关键字CNO相联系,需要时再进行自然联接,恢复了原来的关系
第三范式(3NF):如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称关系R是属于第三范式的。

例:如S1(SNO,SNAME,DNO,DNAME,LOCATION)各属性分别代表学号,

姓名,所在系,系名称,系地址。

关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。

原因:关系中存在传递依赖造成的。即SNO -> DNO。而DNO -> SNO却不存在,DNO -> LOCATION, 因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。

解决目地:每个关系模式中不能留有传递依赖。

解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)

注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系。
BCNF:如果关系模式R(U,F)的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选关键字,那么称关系R是属于BCNF的。或是关系模式R,如果每个决定因素都包含关键字(而不是被关键字所包含),则RCNF的关系模式。

例:配件管理关系模式 WPE(WNO,PNO,ENO,QNT)分别表仓库号,配件号,职工号,数量。有以下条件

a.一个仓库有多个职工。

b.一个职工仅在一个仓库工作。

c.每个仓库里一种型号的配件由专人负责,但一个人可以管理几种配件。

d.同一种型号的配件可以分放在几个仓库中。

分析:由以上得 PNO 不能确定QNT,由组合属性(WNO,PNO)来决定,存在函数依赖(WNO,PNO) -> ENO。由于每个仓库里的一种配件由专人负责,而一个人可以管理几种配件,所以有组合属性(WNO,PNO)才能确定负责人,有(WNO,PNO)-> ENO。因为一个职工仅在一个仓库工作,有ENO -> WNO。由于每个仓库里的一种配件由专人负责,而一个职工仅在一个仓库工作,有(ENO,PNO)-> QNT。

找一下候选关键字,因为(WNO,PNO) -> QNT,(WNO,PNO)-> ENO ,因此(WNO,PNO)可以决定整个元组,是一个候选关键字。根据ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能决定整个元组,为另一个候选关键字。属性ENO,WNO,PNO 均为主属性,只有一个非主属性QNT。它对任何一个候选关键字都是完全函数依赖的,并且是直接依赖,所以该关系模式是3NF。

分析一下主属性。因为ENO->WNO,主属性ENO是WNO的决定因素,但是它本身不是关键字,只是组合关键字的一部分。这就造成主属性WNO对另外一个候选关键字(ENO,PNO)的部分依赖,因为(ENO,PNO)-> ENO但反过来不成立,而P->WNO,故(ENO,PNO)-> WNO 也是传递依赖。

虽然没有非主属性对候选关键辽的传递依赖,但存在主属性对候选关键字的传递依赖,同样也会带来麻烦。如一个新职工分配到仓库工作,但暂时处于实习阶段,没有独立负责对某些配件的管理任务。由于缺少关键字的一部分PNO而无法插入到该关系中去。又如某个人改成不管配件了去负责安全,则在删除配件的同时该职工也会被删除。

解决办法:分成管理EP(ENO,PNO,QNT),关键字是(ENO,PNO)工作EW(ENO,WNO)其关键字是ENO

缺点:分解后函数依赖的保持性较差。如此例中,由于分解,函数依赖(WNO,PNO)-> ENO 丢失了, 因而对原来的语义有所破坏。没有体现出每个仓库里一种部件由专人负责。有可能出现一部件由两个人或两个以上的人来同时管理。因此,分解之后的关系模式降低了部分完整性约束。
一个关系分解成多个关系,要使得分解有意义,起码的要求是分解后不丢失原来的信息。这些信息不仅包括数据本身,而且包括由函数依赖所表示的数据之间的相互制约。进行分解的目标是达到更高一级的规范化程度,但是分解的同时必须考虑两个问题:无损联接性和保持函数依赖。有时往往不可能做到既有无损联接性,又完全保持函数依赖。需要根据需要进行权衡。
1NF直到BCNF的四种范式之间有如下关系:

BCNF包含了3NF包含2NF包含1NF
小结:

目地:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新

原则:遵从概念单一化 "一事一地"原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。

方法:将关系模式投影分解成两个或两个以上的关系模式。

要求:分解后的关系模式集合应当与原关系模式"等价",即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。
注意:一个关系模式结这分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现。其根本目标是节省存储空间,避免数据不一致性,提高对关系的操作效率,同时满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频度极高的数据库系统更是如此。
在关系数据库中,除了函数依赖之外还有多值依赖,联接依赖的问题,从而提出了第四范式,第五范式等更高一级的规范化要求。在此,以后再谈。
各位朋友,你看过后有何感想,其实,任何一本数据库基础理论的书都会讲这些东西,考虑到很多网友是半途出家,来做数据库。特找一本书大抄特抄一把,各位有什么问题,也别问我了,自已去找一本关系数据库理论的书去看吧,说不定,对各位大有帮助。说是说以上是基础理论的东西,请大家想想,你在做数据库设计的时候有没有考虑过遵过以上几个范式呢,有没有在数据库设计做得不好之时,想一想,对比以上所讲,到底是违反了第几个范式呢?

我见过的数据库设计,很少有人做到很符合以上几个范式的,一般说来,第一范式大家都可以遵守,完全遵守第二第三范式的人很少了,遵守的人一定就是设计数据库的高手了,BCNF的范式出现机会较少,而且会破坏完整性,你可以在做设计之时不考虑它,当然在ORACLE中可通过触发器解决其缺点。以后我们共同做设计之时,也希望大家遵守以上几个范式。
===============
简单易记的解释
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
不符合第一范式的例子(关系数据库中create不出这样的表):
表:字段1, 字段2(字段2.1, 字段2.2), 字段3 ......
存在的问题: 因为设计不出这样的表, 所以没有问题;
不符合第二范式的例子:
表:学号, 姓名, 年龄, 课程名称, 成绩, 学分;
这个表明显说明了两个事务:学生信息, 课程信息;
存在问题:

数据冗余,每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全删除了;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整。
修正:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
满足第2范式只消除了插入异常。

不符合第三范式的例子:
学号, 姓名, 年龄, 所在学院, 学院联系电话,关键字为单一关键字"学号";
存在依赖传递: (学号) → (所在学院) → (学院地点, 学院电话)
存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
删除异常
修正:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
作者:sunxing007
分享到:
评论

相关推荐

    数据库基于三范式的优化

    第三范式是数据库设计的一个基本原则,它要求表中的非主键属性只依赖于主键属性,从而消除冗余数据和数据不一致性。遵循3NF设计的优点包括: - **节省存储空间**:由于消除了冗余数据,减少了磁盘占用。 - **数据...

    第二章 数据库系统设计及范式分析--班级管理系统需求说明书

    范式分析是数据库设计中的一个重要理论,它有助于避免数据冗余和更新异常。在班级管理系统中,我们至少要遵循第一范式(1NF),确保每个字段都是不可再分的基本数据单元。更高范式如第二范式(2NF)和第三范式(3NF...

    数据库索引总结

    数据库三范式是关系数据库设计的基础原则,确保数据的一致性和减少冗余。第一范式(1NF)要求每个字段只包含原子值;第二范式(2NF)在1NF基础上,消除部分依赖;第三范式(3NF)进一步消除传递依赖。遵循这些范式有...

    数据库设计反范式.pdf

    在数据库设计中,范式是一种规范化理论,旨在减少数据冗余和提高数据一致性。范式分为不同级别,如1NF(第一范式)、2NF(第二范式)和3NF(第三范式)。1NF要求数据具有原子性,确保每个字段只包含单一值;2NF强调...

    数据库面试知识点汇总

    数据库面试知识点汇总是对数据库方方面面的总结,涵盖了数据库设计、数据库范式、索引、数据库性能优化等方面的知识点。下面是对这些知识点的详细解释: 一、数据库设计 数据库设计是指对关系型数据库的设计,目的...

    经典SQL语句大全,sql基础培训资料,数据库设计三范式

    SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言,它是数据存储、查询、更新和管理的核心工具。在这个“经典SQL语句大全”和“sql基础培训资料”中,我们将会探讨一系列关于SQL的重要概念和...

    数据库系统设计 关系数据库

    在实际的数据库设计中,规范化理论不仅用于指导关系模式的构建,还涉及到索引设计、查询优化、事务处理等多个方面。例如,通过选择合适的范式,可以减少更新操作对数据库的影响,降低由于数据不一致引发的问题。同时...

    关系数据库理论及其应用

    《关系数据库理论及其应用》这一主题涵盖了数据库设计的基础理论与实际操作技巧,主要关注的是关系型数据库模型,以及SQL语言在数据库管理和开发中的应用。在本文中,我们将深入探讨关系数据库的基本概念,SQL语言的...

    关系数据库转成一张表

    1. 数据库范式:关系数据库设计通常遵循范式理论,如第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等,以减少数据冗余和提高数据一致性。但在实际操作中,为了查询效率,可能会将部分数据分解到多个相关表中,...

    关系数据库案例.rar

    关系数据库是数据存储和管理的核心工具,广泛应用于各种信息系统中。这个"关系数据库案例.rar"压缩包文件似乎包含了关于实际应用关系数据库的一些示例或教程资料。以下是对关系数据库及其重要概念的详细解释: 关系...

    SQL关系数据库详细课件

    在本课件中,我们将深入探讨SQL以及关系数据库的基础知识,帮助你掌握这一重要的数据管理工具。 1. SQL基础概念: - DDL(Data Definition Language):用于创建和修改数据库结构,如CREATE TABLE用于创建表,...

    关系数据库与SQL Server 2005

    在设计数据库时,我们需要遵循范式理论,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以确保数据的完整性和一致性。 SQL Server 2005提供了一整套工具和技术来创建、管理和发展关系数据库。它支持...

    数据库思维导图,数据库复习必看,附两份满分笔记

    3. **范式**:范式是衡量关系数据库设计质量的标准,主要包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)和第四范式(4NF)等。每个更高的范式都减少了数据冗余,降低了更新异常的...

    北邮数据库中文课件

    4. **范式理论**:数据库设计中,范式是一种规范化的过程,包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF(巴斯-科德范式)和第四范式(4NF)等,旨在减少数据冗余和提高数据一致性。 5. **索引**:为了...

    关系数据库理论课件及试题

    关系数据库理论是数据库管理系统的...这不仅有助于新手掌握关系数据库的基础知识,也为将来在实际项目中应用这些理论打下坚实基础。通过学习,新手们将能够设计、创建和管理自己的关系数据库,解决各种数据管理问题。

    SQL基础语法+数据库设计与范式+数据查询与筛选+数据排序与分组+SQL函数与表达式+子查询与嵌套查询+连接查询等全套教程

    数据库设计与范式 数据查询与筛选 数据排序与分组 SQL函数与表达式 子查询与嵌套查询 连接查询:内连接与外连接 事务处理与SQL 视图与存储过程 索引与优化查询 数据库安全性与权限管理 SQL与大数据处理 SQL在Web开发...

    东北大学数据库实验报告(PostgreSQL)

    在“数据库实验一”中,学生们通常会接触到数据库的基本概念,包括数据模型的三大类型:关系型数据模型、层次数据模型和网络数据模型。重点是关系型数据模型,因为它在实际应用中最为广泛,特别是PostgreSQL这种关系...

    合肥工业大学数据库.rar

    【数据库范式】 范式是数据库设计中遵循的规范化规则,以减少数据冗余和提高数据一致性。常见的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF(巴斯-科德范式)和第四范式(4NF)。理解这些范式...

    三级数据库总结(笔试机试)全

    面试中,关系数据库的概念、范式理论(如第一范式、第二范式、第三范式和BCNF)、索引、事务处理、视图、存储过程等都是常见的考点。 除了数据库类型,笔试和机试还可能涵盖以下知识点: - 数据库设计:包括需求...

Global site tag (gtag.js) - Google Analytics