Ⅰ SQL实战新手入门:关系型数据库管理系统
关系型数据库管理系统
本书是讲述SQL的 它是一种关系型数据库或者关系型数据库管理系统(RDBMS)的语言 自从Codd博士在 世纪 年代奠定关系型数据库的理论基础以来 已经产生了相当多的关系型数据库实现 一些新的关系型数据库实现也不断出现
很多人将DB 视为所有数据库的鼻祖 IBM的研究员Edgar Frank Codd博士在 年的一份IBM的研究报告中发表他的论文 Derivability Rendancy and Consistency of Relations Stored inLarge Data Banks 时 给这种数据库理论定义了一个非常恰当的术语 关系型 关系型数据库被其他两种技术竞争 一种是Honeywell Information Systems在 年销售的Multics RelationalData Store 另一种是密歇根大学从 年起作为实验性设计的Micro DBMS(它开创了Codd博士两年之后提出的规范化理论) Micro DBMS的最后一个产品已经于 年退役 这两种技术演变成了 年发布的Oracle V 商业数据库 在通往RDBMS的道路上 包含了很多其他公司的产品所树立的里程碑(当然偶尔也有墓碑) 这些产品包括 IBM PRTV( ) IBM SQL/DS( ) QBE( ) Informix( ) Sybase( ) Teradata( ) Ingres 一个给其他很多成功的系统带来灵感的开源项目 例如PostgreSQL( ) Nonstop SQL( )和MicrosoftSQL Server( )等 这些系统使用了原始SQL的不同方言 SEQUEL QUEL Informix SQL等 直到 年 人数培们才第一次试图为SQL语言制定标准 毫无疑问 各个厂商关于SQL语言的战争仍在继续
当前的RDBMS市场已经被几个重量级的专有关系型数据库瓜分 Oracle( %) IBM( %)和Microsoft( %) 更小的专有数据库系统Teradata和Sybase 每种不到 %的市场份额 其他数据库厂商 包括开源数据库轿毕旁 大约占有 %的市场份额
对于大型企业来说 选择一个数据库产品作为应用程序的基础并不是一个简单的任务 这不仅仅是因为数据库系统软件需要花费好几万美元的许可证费用 几十万美金的维护和技术支持费 而且在于与其他软件 硬件和人力资源投资相比 数据库软件的投资还是一个决定整个企业架构的关键要素 尽管近年来从一个RDBMS迁移到另一个RDBMS变得更加容易 但考虑选择哪一种数据库依然会给CFO带来噩梦
IBM DB LUW
从带有MVS系列操作系统的大型机到z/OS 以及闭橡后来的UNIX和Windows系统 IBM在RDBMS领域都是一个长期的领跑者 IBM数据库的当前版本是IBM DB LUW(Linux UNIX和Windows)
IBM DB 在事务处理速度上保持了绝对领先的记录(更多信息请参见第 章) 它具有多个不同的版本 从Advanced Server Enterprise版本到免费的DB Express C版本(尽管功能上有限制) 免费的DB Express C版本可用于运行本书中的示例
直到DB 的 版本 依然遵循ANSI/ISO SQL Entry标准(请参考本章后面的内容)并支持由其他标准化组织制定的一些高级功能 例如Open Geospatial Consortium(开放地理信息联盟) JDBC X/Open XA 它还包含了最新SQL: 标准的部分功能 除了自己内置的过程化扩展语言SQL PL之外 它还支持使用Oracle的PL/SQL语言 Java语言 甚至Microsoft的 NET家族的语言来创建存储过程(更多内容请参见第 章)
Oracle
Oracle数据库可以追溯到 年第一次发布的Oracle V 开始时用于VAX/VMS系统 并于 年支持UNIX系统 经过多年发展 对于SQL标准定义的绝大多数功能 Oracle数据库都添加了相应的支持 在最新发布的Oracle g版本中功能支持达到了极致 它声称遵循最新SQL: 标准的很多功能
在高性能事务处理的标杆上 Oracle占据了第二名的位置 它是企业生态系统的核心 Oracle是一个安全的 健壮的 可伸缩的 高性能的数据库系统 它统治UNIX市场长达数十年 除了对SQL标准的支持之外 Oracle还提供了一种内置的过程化语言PL/SQL(关于过程化扩展的更多内容 请参见第 章) 另外它还支持通用的程序设计语言 例如Java
在写作本书之时 Oracle的最新版本是Oracle g 只有Oracle g有免费的速成版 该版本在数据存储的容量和RDBMS能够利用的处理器(CPU)数量上存在一定的限制 速成版完全支持本书所讨论的所有SQL功能
Microsoft SQL Server
SQL Server来源于Microsoft Ashton Tate和Sybase合作的结果 开始的目标是改写已有的 仅适用于UNIX的Sybase SQL Server数据库 使之适用于新的IBM操作系统OS/ Ashton Tate随后退出了这一合作 IBM OS/ 操作系统也逐渐被人淡忘 Microsoft和Sybase为了分享成果 开始小心地避免触犯彼此 Microsoft致力于发展并支持Windows和OS/ 系统上的SQL Server 而Sybase则致力于UNIX平台 尽管在SQL Server的核心技术上Microsoft依然采用了相当多的Sybase技术 但双方的合作关系于 年正式结束 Microsoft于 年发布了Microsoft SQLServer 它消除了Sybase余留的痕迹 为世界(Windows系统的世界)带来了一个完全崭新的RDBMS系统 时至今日 Microsoft占据了RDBMS大约 %的市场份额 而在Windows系统上它占据了至高无上的位置
在写作本书之时 最新版本是Microsoft SQL Server Release Microsoft还提供了一个免费但有限制的Express版本 它支持本书所介绍的全部SQL功能
Microsoft Access
Microsoft Access也被称为Microsoft Office Access 它是一个桌面型关系数据库(相对来说是关系型的) Microsoft Access的设计目标是成为一个集成的解决方案 结合关系型数据库引擎的要素和应用程序开发的基础结构(配套有内置的程序设计语言和程序设计模型) 并作为一个报表平台 与本书中讨论的其他RDBMS不同的是 Microsoft Access是一个基于文件的数据库 因此它在性能和可伸缩性方面都存在固有的局限 例如 虽然最新版本的Access理论上允许最多 个并发用户 但在实践中超过 多个用户就会减慢Access的性能 Access仅支持SQL标准的一个子集 它提供了许多仅在Access环境中有效的功能
Access提供的功能之一就是从远程数据库链接表的能力 该功能使Access可以作为应用程序
PostgreSQL
PostgreSQL是从美国加州伯克利大学的Michael Stonebraker所领导的一个项目演变而来的 Michael Stonebraker是关系型数据库理论的先驱 在最初的Ingres项目以及其继任者PostgreSQL中采用的那些原则也以各种方式被其他RDBMS产品采用 例如Sybase Informix EnterpriseDB和Greenplum
PostgreSQL的第一个版本发布于 年 之后第二年以 版本的名义发布 并保留了一个由一组专门的开发人员维护的开源项目 PostgreSQL具有很多个商业版本 最着名的是EnterpriseDB 一个私人公司为该产品提供企业支持(以及大量专有的管理工具) 在一些苛刻的企业级应用环境中 很多高端客户(例如Sony和Vonage)都采用了开源的RDBMS 这充分证明了EnterpriseDB的性能
在对SQL标准的支持方面 PostgreSQL可以说是最接近SQL标准的 另外它还提供了很多在其他数据库中所没有的功能 与它的开源伙伴(例如MySQL)不同 PostgreSQL从一开始就提供了参照完整性和事务支持 PostgreSQL内置了对PL/pgSQL过程化扩展语言的支持 另外实际上还具有适配其他任何语言来实现过程化扩展的功能
MySQL
MySQL最先是由Michael Widenius和David Axmark于 年开发的 并于 年发布了第一个版本 MySQL最初定位为一个轻量级的快速数据库 用于作为数据驱动型网站的后台数据库 尽管MySQL缺乏更加成熟的RDBMS产品所具有的许多功能 但在提供信息服务的速度上非常快 对于很多场合来说都已经 足够好 (为了达到真正的快速 MySQL避开了参照完整性约束和事务支持 更多内容请参见第 章和第 章) 另外 MySQL有着无法抗拒的价格 它是免费的 因此 在中小规模的用户群中 MySQL成为最流行的关系型数据库 在数据库产品的市场上 很多其他的免费产品在功能上都有所缺乏或者带有近乎商业炒作的宣传 数据库产品的巨人 Oracle IBM Microsoft和Sybase在那时也都没有提供各自RDBMS产品的免费速成版 在 年 Sun Microsystems公司收购了MySQL 随后Sun公司又被Oracle收购
目前 Oracle提供了一个带有商业支持的MySQL版本和一个Community Edition版本 伴随着这一收购 出现了大量分支版本 例如MariaDB和 Percona Server 它们在通用公共许可证(General PublicLicense GPL)下继续保持免费状态 GPL是一种限制最小的开源许可证
MySQL的最新版本是 MySQL 也已经指日可待 它是多平台的(Linux/UNIX/Windows) 并且支持SQL: 的绝大多数功能 其中一些功能依赖于选定的配置选项(例如 存储引擎)
存储引擎选项是MySQL独一无二的特性 它允许采用不同的方式处理不同的表类型 每一种引擎都有独特的功能和一定的限制(例如事务支持 聚集索引 存储限制等) 可以采用不同的存储引擎选项来创建MySQL数据库中的表 默认使用的是MyISAM引擎
HSQLDB和OpenOffice BASE
超结构化查询语言数据库(Hyper Structured Query Language Database HSQLDB)是一个用Java程序设计语言实现的关系型数据库管理系统 它是伯克利软件发行(BSD)许可证(这个许可证相当宽松)下的一个开源数据库
HSQLDB是OpenOffice BASE自带的默认RDBMS引擎 OpenOffice BASE是一个桌面型数据库 被定位于和Microsoft Access进行市场竞争 OpenOffice BASE也是一个关系型数据库 它健壮 功能丰富且相当快速 支持多种平台 包括Linux 各种版本的UNIX和Microsoft Windows OpenOffice BASE声称几乎完全遵循SQL: 标准 该标准包含了本书所讨论的绝大多数SQL子集
改写过的HSQLDB可以作为OpenOffice 套件组件BADE的一个嵌入的后端 并从 版本开始成为OpenOffice 套件中的一部分 与Microsoft Access类似 假如有适当的驱动程序的话 OpenOffice BASE可以连接到多种不同的RDBMS 在OpenOffice BASE产品中 已经包含了大量可用的Java Database Connectivity(JDBC)和ODBC(Open Database Connectivity)驱动程序
随着Oracle收购了OpenOffice 而其在Oracle的资助下作为开源项目的状态并不明确 OpenOffice 社区决定启动一个名为LibreOffice的新项目 意图在原来的BSD许可证的授权下将LibreOffice作为一个免费软件 实现OpenOffice的所有功能
关系型数据库并不是数据库领域中唯一的主角 一些似乎已经被关系型数据库理论打败的旧技术在更快和更便宜的硬件以及软件创新的帮助下卷土重来 对更高性能和更容易创建应用程序的需求催生了对列式数据库(columnar database)和面向对象数据库 使 将所有数据放在一个桶中 方法可行的框架 特定领域扩展(例如测地数据管理或多媒体)以及各种数据访问机制的研究 第 章将讨论这些话题
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixin/Article/program/SQL/201311/16492
Ⅱ 有人教我数据库原理与应用吗
数据库原理与应用教程(全套)内容简介:
数据库技术是计算机学科的一个重要分支,它反映了数据管理的最新技术。第一视频教程分享的这部数据库原理与应用教程内容丰富,结构清晰。它给大家全面讲述了数据库系统的基本概念、基本原理和应用技术,主要内容包括数据库技术概述、关系数据库、关系数据库的标准语言SQL、关系数据库设计、数据库保护、网络数据库等。
数据库技术从诞生到现在,在不到半个世纪的时间里,形成了坚实的理论基础、成熟的商业产品和广泛的应用领域,吸引越来越多的研究者加入。数据库的诞生和发展给计算机信息管理带来了一场巨大的革命。三十多年来,国内外已经开发建设了成千上万个数据库,它已成为企业、部门乃至个人日常工作、生产和生活的基础设施。同时,随着应用的扩展与深入,数据库的数量和规模越来越大,数据库的研究领域也已经大大地拓广和深化了。30年间数据库领域获得了三次计算机图灵奖(C.W. Bachman,E.F.Codd, J.Gray),更加充分地说明了数据库是一个充满活力和创新精神的领域。就让我们沿着历史的轨迹,追溯一下数据库的发展历程。
传统上,为了确保企业持续扩大的IT系统稳定运行,一般用户信息中心往往不仅要不断更新更大容量的IT运维软硬件设备,极大浪费企业资源;更要长期维持一支由数据库维护、服务器维护、机房值班等各种维护人员组成的运维大军,维护成本也随之节节高升。为此,企业IT决策者开始思考:能不能像拧水龙头一样按需调节的使用IT运维服务?而不是不断增加已经价格不菲的运维成本。
随着信息技术和市场的发展,人们发现关系型数据库系统虽然技术很成熟,但其局限性也是显而易见的:它能很好地处理所谓的“表格型数据”,却对技术界出现的越来越多的复杂类型的数据无能为力。九十年代以后,技术界一直在研究和寻求新型数据库系统。但在什么是新型数据库系统的发展方向的问题上,产业界一度是相当困惑的。受当时技术风潮的影响,在相当一段时间内,人们把大量的精力花在研究“面向对象的数据库系统(object oriented database)”或简称“OO数据库系统”。值得一提的是,美国Stonebraker教授提出的面向对象的关系型数据库理论曾一度受到产业界的青睐。而Stonebraker本人也在当时被Informix花大价钱聘为技术总负责人。
然而,数年的发展表明,面向对象的关系型数据库系统产品的市场发展的情况并不理想。理论上的完美性并没有带来市场的热烈反应。其不成功的主要原因在于,这种数据库产品的主要设计思想是企图用新型数据库系统来取代现有的数据库系统。这对许多已经运用数据库系统多年并积累了大量工作数据的客户,尤其是大客户来说,是无法承受新旧数据间的转换而带来的巨大工作量及巨额开支的。另外,面向对象的关系型数据库系统使查询语言变得极其复杂,从而使得无论是数据库的开发商家还是应用客户都视其复杂的应用技术为畏途。
Ⅲ 关系数据库规范化理论的基础和内容
一个关系数据库模式由一组关系模式组成,一个关系模式由一组属性名组成。关系数据库设计,就是如何把已给定的相互关联的一组属性名分组,并把每一组属性名组成关系的问题。然而,属性的分组不是唯一的,不同的分组对应着不同的数据库应用系统,它们的效率往往相差很远。
为了使数据库设计合理可靠,简单实用,长期以来,形成了关系数据库设计的理论——规范化理论。
6.1 关系规范化的作用
规范化,就是用形式更为简洁,结构更加规范的关系模式取代原有关系模式的过程。
如果将两个或两个以上实体的数据存放在一个表里,就会出现下列三个问题:
Ø 数据冗余度大
Ø 插入异常
Ø 删除异常
所谓数据冗余,就是相同数据在数据库中多次重复存放的现象。数据冗余不仅会浪费存储空间,而且可能造成数据的不一致性。
插入异常是指,当在不规范的数据表中插入数据时,由于实体完整性约束要求主码不能为空的限制,而使有用数据无法插入的情况。
删除异常是指,当不规范的数据表中某条需要删除的元组中包含有一部分有用数据时,就会出现删除困难。
(以P98工资表为例)
解决上述三个问题的方法,就是将不规范的关系分解成为多个关系,使得每个关系中只包含一个实体的数据。
(讲例子解)
当然,改进后的关系模式也存在另一问题,当查询职工工资时需要将两个关系连接后方能查询,而关系连接的代价也是很大的。
那么,什么样的关系需要分解?分解关系模式的理论依据又是什么?分解完后能否完全消除上述三个问题?回答这些问题需要理论指导。下面,将加以讨论:
6.2 函数依赖
6.2.1属性间关系
实体间的联系有两类:一类是实体与实体之间联系;另一类是实体内部各属性间的联系。数据库建模一章中讨论的是前一类,在这里我们将学习第二类。
和第一类一样,实体内部各属性间的联系也分为1:1、1:n和m:n三类:
例:职工(职工号,姓名,身份证号码,职称,部门)
1、 一对一关系(1:1)
设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中至多有一个值与之对应,反之,对于Y中的任一具体值,X中也至多有一个值与之对应,则称X、Y两属性间是一对一关系。
如本例职工关系中职工号与身份证号码之间就是一对一关系。
2、一对多关系(1:n)
设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中可以找到多个值与之对应,而对于Y中的任一具体值,X中至多只有一个值与之对应,则称属性X对Y是一对多关系。
如职工关系中职工号与职称之间就是一对多的关系。
3、多对多关系(m:n)
设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中有n个值与之对应,而对于Y中的任一具体值,X中也有m个值与之对应,则称属性X对Y是一对多(m:n)关系。
例如,职工关系中,职称与部门之间就是多对多的关系。
上述属性间的三种关系,实际上是属性值之间相互依赖与相互制约的反映,因而称之为属性间的数据依赖。
数据依赖共有三种:
Ø 函数依赖(Functional Dependency,FD)
Ø 多值依赖(Multivalued Dependency,MVD)
Ø 连接依赖(Join Dependency,JD)
其中最重要的是函数依赖和多值依赖。
6.2.2 函数依赖
函数依赖,是属性之间的一种联系。在关系R中,X、Y为R的两个属性或属性组,如果对于R的所有关系r 都存在:对于X的每一个具体值,Y都只有一个具体值与之对应,则称属性Y函数依赖于属性X。或者说,属性X函数决定属性Y,记作X→Y。其中X叫作决定因素,Y叫作被决定因素。
上述定义,可简言之:如果属性X的值决定属性Y的值,那么属性Y函数依赖于属性X。换一种说法:如果知道X的值,就可以获得Y的值,则可以说X决定Y。
若Y函数不依赖于X,记作:X→Y。
X Y
若X→Y,Y→X,记作:
前面学习的属性间的三种关系,并不是每种关系中都存在着函数依赖。
u 如果X、Y间是1:1关系,则存在函数依赖 X←→Y
u 如果X、Y间是1:n关系,则存在函数依赖: X→Y或Y→X(多方为决定因素)
u 如果X、Y间是m:n关系,则不存在函数依赖。
注意,属性间的函数依赖不是指R的某个或某些关系子集满足上述限定条件,而是指R的一切关系子集都要满足定义中的限定。只要有一个具体的关系r(R的一个关系子集)不满足定义中的条件,就破坏了函数依赖,使函数依赖不成立。
这里的关系子集,指的是R的某一部分元组的集合,例如:地测学院的学生关系中只包含了地测学院学生的数据,所以它是长安大学学生关系的一个子集。
6.2.3 码的定义
前面,我们对码进行了直观化的定义,下面用函数依赖的概念对码作出较为精确的形式化的定义:
设K是关系模式R(U,F)中的属性或属性组,K’是K的任一子集。若K→U,而不存在K’→U,则K为R的候选码(Candidate Key)
Ø 若候选码多于一个,则选其中的一个为主码(Primary Key);
Ø 包含在任一候选码中的属性,叫做主属性(Primary Attribute);
Ø 不包含在任何码中的属性称为非主属性(Nonprime Attribute)或非码属性(Nonkey Attribute)
Ø 关系模式中,最简单的情况是单个属性是码,称为单码(Single Key);最极端的情况是整个属性组是码,称为全码(All-Key)。
前面已多次遇到单码的情况,下面是一个全码的例子:
签约(演员名,制片公司,电影名)
外码:设有两个关系R和S,X是R的属性或属性组,并且X不是R的码,但X是S的码(或与S的码意义相同),则称X是R的外部码(Foreign Key),简称外码或外键。
如:职工(职工号,姓名,性别,职称,部门号)
部门(部门号,部门名,电话,负责人)
其中职工关系中的“部门号”就是职工关系的一个外码。
在此需要注意,在定义中说X不是R的码,并不是说X不是R的主属性,X不是码,但可以是码的组成属性,或者是任一候选码中的一个主属性。
如:学生(学生号,姓名,性别,年龄…)
课程(课程号,课程名,任课老师…)
选课(学生号,课程号,成绩)
在选课关系中,(学生号,课程号)是该关系的码,学生号、课程号又分别是组成主码的属性(但单独不是码),它们分别是学生关系和课程关系的主码,所以是选课关系的两个外码。
关系间的联系,可以通过同时存在于两个或多个关系中的主码和外码的取值来建立。如要查询某个职工所在部门的情况,只需查询部门表中的部门号与该职工部门号相同的记录即可。所以,主码和外码提供了一个表示关系间联系的途径。
6.2.4 函数依赖和码的唯一性
由上述码的形式化定义,我们可以说:码是由一个或多个属性组成的,可唯一标识元组的最小属性组。
码在关系中总是唯一的,即一个码函数唯一地决定一行。如果码的值重复,则整个元组都会重复。否则,违反了实体完整性规则。而元组的重复则表示存在两个完全相同的实体,这显然是不可能的,所以码是不允许重复取值的。
所以,只有当某个属性或属性组能够函数决定关系中的每一个其它的属性,且该属性组的任何一个真子集都做不到这一点时,该属性或属性组才是该关系的码。
函数依赖是一个与数据有关的事物规则的概念。如果属性B函数依赖于属性A,那么若知道了A的值,则完全可以找到B的值。这并非是可以由A的值计算出B的值,而是逻辑上只能存在一个B的值。
6.3 关系模式的规范化
一、非规范化的关系
当一个表中存在还可以再分的数据项时,这个表就是非规范化的表。非规范化表存在两种情况:
Ø 表中具有组合数据项(P102表6-4)
Ø 表中具有多值数据项(P103表6-5)
例:
职工号
姓名
工资
基本工资
职务工资
工龄工资
1002
张三
1000
800
200
职工号
姓名
职称
系名
系办地址
学历
毕业年份
001
张三
教授
计算机
1305
大学
研究生
1963
1982
那么什么是规范化关系呢?
当一个关系中的所有分量都是不可再分的数据项时,该关系是规范化的。即当表中不存在组合数据项和多值数据项,只存在不可分的数据项时,这个表是规范化的。
二维表按其规范化程度从低到高可分为5级范式(Normal Form),分别称为1NF、2NF、3NF(BCNF)、4NF、5NF。规范化程度较高者必是较低者的子集,即:
1NF 2NF 3NF BCNF 4NF 5NF
二、第一范式(1NF)
定义1:如果关系模式R中不包含多值属性,则R满足第一范式(First Normal Form),记作:
R∈1NF
1NF是对关系的最低要求,不满足1NF的关系是非规范化的关系。
非规范化关系转化为规范化关系1NF方法很简单,只要上表分别从横向、纵向展开即可。如下表:
职工号
姓名
基本工资
职务工资
工龄工资
1002
张三
1000
800
200
1005
李四
1200
900
150
职工号
姓名
职称
系名
系办地址
学历
毕业年份
1002
张三
教授
计算机
1305
大学
1963
1002
张三
教授
计算机
1305
研究生
1982
1005
李四
讲师
信电
2206
大学
1989
上表虽然符合1NF,但仍是有问题的关系,表中存在大量的数据冗余和潜在的数据更新异常。原因是(职工号,学历)是右表的码,但姓名、职称、系名、系办地址却与学历无关,只与码的一部分有关。所以上表还需进一步地规范化。
三、第二范式(2NF)
定义1:设X、Y是关系R的两个不同的属性或属性组,且X → Y。如果存在X的某一个真子集X’,使X’ → Y成立,则称Y部分函数依赖于X,记作:X P→ Y(Partial)。反之,则称Y完全函数依赖于X,记作:X F→ Y (Full)
定义2:如果一个关系 R∈1NF,且它的所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作:R∈2NF。
说明:上述定义中所谓的候选码也包括主码,因为码首先应是候选码,才可以被指定为码。
例如关系模式:
职工(职工号,姓名,职称,项目号,项目名称,项目角色)中
(职工号,项目号)是该关系的码,而职工号→姓名、职工号→职称、项目号→项目名称…
所以(职工号,项目号)P→ 职称、(职工号,项目号)P→ 项目名称
故上述职工关系不符合第二范式要求。它存在三个问题:插入异常、删除异常和修改异常。
其中修改异常是这样的,当职工关系中项目名称发生变化时,由于参与该项目的人员很多,每人一条记录,要修改项目信息,就得对每一个参加该项目的人员信息进行修改,加大了工作量,还有可能发生遗漏,存在着数据一致性被破坏的可能。
可把上述职工关系分解成如下三个关系:
职工(职工号,姓名,职称)
参与项目(职工号,项目号,项目角色)
项目(项目号,项目名称)
上述三个关系都符合定义2的要求,所以都符合2NF
推论:如果关系模式R∈1NF,且它的每一个候选码都是单码,则R∈2NF
符合第二范式的关系模式仍可能存在数据冗余、更新异常等问题。如关系
职工信息(职工号,姓名,职称,系名,系办地址)
虽然也符合2NF,但当某个系中有100名职工时,元组中的系办地址就要重复100次,存在着较高的数据冗余。原因是关系中,系办地址不是直接函数依赖于职工号,而是因为职工号函数决定系名,而系名函数决定系办地址,才使得系办地址函数依赖于职工号,这种依赖是一个传递依赖的过程。
所以,上述职工信息的关系模式还需要进一步的规范化。
四、第三范式(3NF)
定义1:在关系R中,X、Y、Z是R的三个不同的属性或属性组,如果X→Y,Y→Z, 但Y→X,且Y不是X的子集,则称Z传递函数依赖于X。
定义2:如果关系模式R∈2NF,且它的每一个非主属性都不传递依赖于任何候选码,则称R是第三范式,记作:R∈3NF
推论1:如果关系模式R∈1NF,且它的每一个非主属性既不部分依赖、也不传递依赖于任何候选码,则R∈3NF
推论2:不存非主属性的关系模式一定为3NF
五、改进的3NF——BCNF(Boyee-Codd Normal Form)
定义:设关系模式R(U,F)∈1NF,若F的任一函数依赖X→Y(Y X)中X都包含了R的一个码,则称R∈BCNF。
换言之,在关系模式R中,如果每一个函数依赖的决定因素都包含码,则R∈BCNF
推论:如果R∈BCNF,则:
Ø R中所有非主属性对每一个码都是完全函数依赖;
Ø R中所有主属性对每一个不包含它的码,都是完全函数依赖;
Ø R中没有任何属性完全函数依赖于非码的任何一组属性。
定理:如果R∈BCNF,则R∈3NF一定成立。
证明:(结合传递依赖的定义,用反证法)
注意:当R∈3NF时,R未必属于BCNF。因为3NF比BCNF放宽了一个限制,它允许决定因素不包含码。例如:
通讯(城市名,街道名,邮政编码)中:
F={(城市名,街道名)→邮政编码,邮政编码→城市名}
非主属性邮政编码完全函数依赖于码,且无传递依赖,故属于3NF,但邮政编码也是一个决定因素,而且它没有包含码,所以该关系不属于BCNF。
又如:
Teaching(Student,Teacher,Course) 简记为Teaching(S,T,C)
规定:一个教师只能教一门课,每门课程可由多个教师讲授;学生一旦选定某门课程,教师就相应地固定。
F={T→C,(S,C)→T,(S,T) →C}
该关系的候选码是(S,C)和(S,T),因此,三个属性都是主属性,由于不存在非主属性,该关系一定是3NF。但由于决定因素T没包含码,故它不是BCNF。
关系模式Teaching仍然存在着数据冗余问题,因为存在着主属性对码的部分函数依赖问题。
确切地表示:F={T→C,(S,C)P→T,(S,T) P→C}
所以Teaching关系可以分解为以下两个BCNF关系模式:
Teacher(Teacher,Course) Student(Student,Teacher)
3NF的“不彻底”性,表现在可能存在主属性对码的部分依赖和传递依赖。
一个关系模式如果达到了BCNF,那么,在函数依赖范围内,它就已经实现了彻底的分离,消除了数据冗余、插入和删除异常。
6.4 多值依赖和第四范式
一、多值依赖(Multivalued Dependency)
课程C
教员T
参考书B
物理
李勇
普通物理学
物理
李勇
光学原理
物理
李勇
物理习题集
物理
王军
普通物理学
物理
王军
光学原理
物理
王军
物理习题集
数学
李勇
数学分析
数学
李勇
微分方程
数学
李勇
高等代数
数学
张平
数学分析
数学
张平
微分方程
数学
张平
高等代数
计算数学
张平
数学分析
计算数学
张平
计算数学
计算数学
周峰
数学分析
计算数学
周峰
计算数学
课程C
教员T
参考书B
物理
李勇
王军
普通物理学
光学原理
物理习题集
数学
李勇
张平
数学分析
微分方程
高等代数
计算数学
张平
周峰
数学分析
计算数学
例:学校中某一门课程由多个教员讲授,他们使用相同的一套参考书,每个教员可以讲授多门课程,每种参考书可以供多门课程使用。下列是用一个非规范化的表来表示教员T,课程C和参考书B之间的关系。
把上表变换成一张规范化的二维表Teaching,如右表
关系模式Teaching(C,T,B)的码是(C,T,B),即All-Key。因而Teaching∈BCNF。按照上述语义规定,当某门课程增加一名讲课教员时,就要向Teaching表中增加与相应参考书等数目的元组。同样,某门课程要去掉一本参考书时,则必须删除相应数目的元组。
对数据的增、删、改很不方便,数据的冗余也十分明显。如果仔细考察这类关系模式,会发现它具有一种称之为多值依赖的数据依赖关系。
定义:设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,且Z=U-X-Y。如果对R(U)的任一关系r,给定一对(x,z)值,都有一组y值与之对应,这组y值仅仅决定于x值而与z值无关。则称Y多值依赖于X,或X多值决定Y,记作:X→→Y。――
例如,在关系模式Teaching中,对于一个(C,B)值(物理,普通物理学),有一组T值{李勇,王军},而这组值仅仅决定于课程C上的值(物理)。即对于另一个(物理,光学原理),它对应的T值仍然是{李勇,王军},所以T的值与B的值无关,仅决定于C的值,即C→→T 。
多值依赖的另一个等价的形式化定义为:
设关系模式R(U),X、Y、Z是U的子集,Z=U-X-Y,r是R的任意一个关系,t1、t2是r的任意两个元组。如果t1[X]=t2[X],并在r中存在两个元组t3、t4,使得:
t3[X]=t4[X]=t1[X]
t3[Y]=t1[Y],t3[Z]=t2[Z],
t4[Y]=t2[Y],t4[Z]=t1[Z]
成立,则X→→Y。
换句话说:如果X→→Y在R(U)中成立,则只要在R的任一关系r中存在两个元组t1、t2在X属性上的值相等,则交换这两个元组在Y(或Z)上的值后得到的两个新元组t3、t4也必是关系r中的元组。
定义中如果Z=Ф(空集),则称X→→Y为平凡的多值依赖,否则为非平凡的多值依赖。
多值依赖具有如下性质:
1. 对称性:若X→→Y,则X→→Z,其中Z=U-X-Y
2. 传递性:若X→→Y,Y→→Z,则X→→Z-Y
3. 若X→→Y,X→→Z,则X→→YZ
4. 若X→→Y,X→→Z,则X→→Y∩Z
5. 若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y
多值依赖与函数依赖相比,具有下面两个基本区别:
(1)多值依赖的有效性与属性集的范围有关
若X→→Y在U上成立,则在V(XY V U)上一定成立;反之则不然,即X→→Y在V(V U)上成立,在U上并不一定成立。这是因为多值依赖的定义中不仅涉及属性组X、Y,而且涉及U中的其余属性Z(Z=U-X-Y)。
一般地说,在R(U)上若有X→→Y在V(V U)上成立,则称X→→Y为R(U)的嵌入型多值依赖。
而在关系模式R(U)中函数依赖X→Y的有效性,仅决定于X和Y这两个属性集的值。只要在R(U)的任何一个关系r中,元组在X和Y上的值使得X→Y成立,则X→Y在任何属性集V(XY V U)上也成立。
(2)若函数依赖X→Y在R(U)上成立,则对于任何Y’ Y 均有X→Y’ 成立。而多值依赖X→→Y若在R(U)上成立,却不能断言对于任何Y’ Y有X→→Y’ 成立。
多值依赖的约束规则:在具有多值依赖的关系中,如果随便删去一个元组,就会破坏其对称性,那么,为了保持多值依赖关系中的“多值依赖”性,就必须删去另外的相关元组以维持其对称性。这就是多值依赖的约束规则。目前的RDBMS尚不具有维护这种约束的能力,需要程序员在编程中实现。
函数依赖可看成是多值依赖的特例,即函数依赖一定是多值依赖。而多值依赖则不一定就有函数依赖。
二、第四范式(4NF)
定义:如果关系模式R∈1NF,对于R的每个非平凡的多值依赖X→→Y(Y X),X含有码,则称R是第四范式,即R∈4NF
课程C
教员T
参考书B
物理
李勇
普通物理学
物理
李勇
光学原理
物理
李勇
物理习题集
物理
王军
普通物理学
物理
王军
光学原理
物理
王军
物理习题集
数学
李勇
数学分析
数学
李勇
微分方程
数学
李勇
高等代数
数学
张平
数学分析
数学
张平
微分方程
数学
张平
高等代数
计算数学
张平
数学分析
计算数学
张平
计算数学
计算数学
周峰
数学分析
计算数学
周峰
计算数学
Teaching关系
关系模式R∈4NF时,R中所有的非平凡多值依赖实际上就是函数依赖。因为每一个决定因素中都含有码,所以R一定属于BCNF。
4NF实际上就是限制关系模式的属性间不允许有非平凡,而且非函数依赖的多值依赖存在。反过来说,4NF所允许的非平凡多值依赖实际上是函数依赖。
例题中的Teaching关系属于BCNF,但它不属于4NF。因为它的码是(C,T,B),关系中存在非平凡多值依赖C→→T ,C→→B,但C不包含码,而只是码的一部分。
课程C
参考书B
物理
普通物理学
物理
光学原理
物理
物理习题集
数学
数学分析
数学
微分方程
数学
高等代数
计算数学
数学分析
计算数学
计算数学
CB关系
课程C
教员T
物理
李勇
物理
王军
数学
李勇
数学
张平
计算数学
张平
计算数学
周峰
CT关系
要使Teaching关系符合4NF,必须将其分解为CT(C,T)和CB(C,B)两个关系模式。如右表:
从表中显而易见,符合BCNF的关系Teaching仍然存在着数据冗余,而分解后的关系CT和CB中只有平凡多值依赖,所以符合4NF,它们已经消除了数据冗余。可以说:BCNF是在只有函数依赖的关系模式中,规范化程度最高的范式,而4NF是在有多值依赖的关系模式中,规范化程度最高的范式。
如果关系模式中存在连接依赖,即便它符合4NF,仍有可能遇到数据冗余及更新异常等问题。所以对于达到4NF的关系模式,还需要消除其中可能存在的连接依赖,才可以进一步达到5NF的关系模式。
关于连接依赖和5NF的内容,已超出了本课程教学大纲的要求,在此不再介绍。
Ⅳ 谁能说一说数据库技术的应用与发展
数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心。数据库技术研究和解决了计算机信息处理过程中大量数据有效地组织和存储的问题,在数据库系统中减少数据存储冗余、实现数据共享、保障数据安全以及高效地检索数据和处理数据。
随着计算机技术与网络通信技术的发展,数据库技术已成为信息社会中对大量数据进行组织与管理的重要技术手段及软件技术,是网络信息化管理系统的基础。本章主要介绍数据库技术的应用与发展、关系模型的基本概念、关系数据库的设计理论及数据库设计方法等内容,是学习和掌握现代数据库技术的基础。
1.1 数据库技术的发展与应用
从20世纪60年代末期开始到现在,数据库技术已经发展了30多年。在这30多年的历程中,人们在数据库技术的理论研究和系统开发上都取得了辉煌的成就,而且已经开始对新一代数据库系统的深入研究。数据库系统已经成为现代计算机系统的重要组成部分。
1.1.1 数据库技术与信息技术
信息技术(Information Technology,IT)是当今使用频率最高的名词之一,它随着计算机技术在工业、农业以及日常生活中的广泛应用,已经被越来越多的个人和企业作为自己赶超世界潮流的标志枯斗之一。而数据库技术则是信息技术中一个重要的支撑。没有数据库技术,人们在浩瀚的信息没悉磨世界中将显得手足无措。
数据库技术是计算机科学技术的一个重要分支。从20世纪50年代中期开始,计算机应用从科学研究部门扩展到企业管理及政府行政部门,人们对数据处理的要求也越来越高。1968年,世界上诞生了第一个商品化的信息管理系统IMS(Information Management System),从此,数据库技术得到了迅猛发展。在互联网日益被人们接受的今天,Internet又使数据库技术、知识、技能的重要性得到了充分的放大。现在数据库已经成为信息管理、办公自动化、计陆谨算机辅助设计等应用的主要软件工具之一,帮助人们处理各种各样的信息数据。
1.1.2 数据库技术的应用及特点
数据库最初是在大公司或大机构中用作大规模事务处理的基础。后来随着个人计算机的普及,数据库技术被移植到PC机(Personal Computer,个人计算机)上,供单用户个人数据库应用。接着,由于PC机在工作组内连成网,数据库技术就移植到工作组级。现在,数据库正在Internet和内联网中广泛使用。
20世纪60年代中期,数据库技术是用来解决文件处理系统问题的。当时的数据库处理技术还很脆弱,常常发生应用不能提交的情况。20世纪70年代关系模型的诞生为数据库专家提供了构造和处理数据库的标准方法,推动了关系数据库的发展和应用。1979年,Ashton-Tate公司引入了微机产品dBase Ⅱ,并称之为关系数据库管理系统,从此数据库技术移植到了个人计算机上。20世纪80年代中期到后期,终端用户开始使用局域网技术将独立的计算机连接成网络,终端之间共享数据库,形成了一种新型的多用户数据处理,称为客户机/服务器数据库结构。现在,数据库技术正在被用来同Internet技术相结合,以便在机构内联网、部门局域网甚至WWW上发布数据库数据。
1.1.3 数据库技术发展历史
数据模型是数据库技术的核心和基础,因此,对数据库系统发展阶段的划分应该以数据模型的发展演变作为主要依据和标志。按照数据模型的发展演变过程,数据库技术从开始到现在短短的30年中,主要经历了三个发展阶段:第一代是网状和层次数据库系统,第二代是关系数据库系统,第三代是以面向对象数据模型为主要特征的数据库系统。数据库技术与网络通信技术、人工智能技术、面向对象程序设计技术、并行计算技术等相互渗透、有机结合,成为当代数据库技术发展的重要特征。
1. 第一代数据库系统
第一代数据库系统是20世纪70年代研制的层次和网状数据库系统。层次数据库系统的典型代表是1969年IBM公司研制出的层次模型的数据库管理系统IMS。20世纪60年代末70年代初,美国数据库系统语言协会CODASYL(Conference on Data System Language)下属的数据库任务组DBTG(Data Base Task Group)提出了若干报告,被称为DBTG报告。DBTG报告确定并建立了网状数据库系统的许多概念、方法和技术,是网状数据库的典型代表。在DBTG思想和方法的指引下数据库系统的实现技术不断成熟,开发了许多商品化的数据库系统,它们都是基于层次模型和网状模型的。
可以说,层次数据库是数据库系统的先驱,而网状数据库则是数据库概念、方法、技术的奠基者。
Ⅳ 自考计算机信息管理科目:数据库及其应用课程简介
《数据库原理及应用》以目前比较流行的大型关系型数据库SQLServer为载体,向学生讲述了大型关系数据库的概念、管理、设计和开发。本课程主要介绍数据库基础知识和SQLServer数据库管理系统这两个方面。数据库基础知识主要介绍数据库组织、管理和使用的一般知识,包括数据模型、数据库结构、数据库系统、数据库设计、关系运算、关系规范化、关系查询(SQL语言)等内容;SQLServer数据库管理系统主要介绍表、视图、索引、存储过程、触发器、数据安全措施、游标与程序设计等内容。通过本课程的学习,要求学生能从实用性的角度出发理解并掌握数据库的安全性、并发控制和恢复技术,能熟练的编写基本的SQL语句,掌握索引、数据完整性、视图、存储过程、触发器等概念及使用方法,并能进行数据库的设计、开发与管理。但是,学习本课程前要求学生对计算机系统的构成和Windows操作界面的使用有所了解,掌握一种高级程序设计语言;在使用VB、Delphi、PB等软件开发工具进行应用系统开发时,通常都需要数据库知识的支持。码租
本课程理论性、实践性和应用性都很强。在理论方面涉及到集合理论、关系理论、数据库设计理论等;实践性强体现为:数据库设计理论是随着计算机技术迟明兆和人们的设计实践不断地丰富和发展的,将不断地产生出新的设计技术和理论;应用性强是指:现在每一个实用的计算机信息管理系统几乎都涉及到数据库应用,通常为后台应用。每个企业都需要专门进行计算机信息处理人员或专业的信息管理系槐蠢统对信息进行收集、存储、处理及运用。因此自考计算机信息管理专业受到报考考生的青睐,越来越多考生选择报考自考计算机信息管理专业,一方面可以掌握专业知识技能,一方面能拿到这所名牌高校的毕业证书。想要报考自考计算机信息管理专业的考生可以通过网上报名或现场报名的形式进行报考。详情可咨询猎考网
Ⅵ 数据库原理与应用的内容简介
该书以关系数据库系统为核心,系统全面地阐述了数据库系统的基本概念、基本原理和应用技术,主要内容包括数据库技术概述、关系数据库、关系数据库的标准语言SQL、关系数据库设计、数据库保护、网络数据库、网络数据库管理系统SQL Server 2000、分布式数据库系统、XML数据库等。
本书概念清楚、重点突出、章节安排合理,理论与实践结合紧密。每章配以丰富的习题、案例及实验,有助于读者加深对内容的理解、掌握并巩固概念;案例为读者提供了真实的数据库应用场景,有助于读者从实际应用的角度出发,联系所学理论,掌握所学内容;而实验为读者提供了将理论与实践相结合的具体上机操作途径,最终巩固所学内容。习题、案例与实验的设计也是本书一个比较突出的特点。
本书既可作为高等学校本科计算机专业(信息技术方向)、信息管理与信息系统专业及相关专业数据库课程的教学用书,也可作为从事信息领域工作的科技人员的自学参考书。
Ⅶ 数据库原理及应用
《数据库原理及应用》是2012年清华大学出版社出版的图书,作者是雷景生。
《数据库原理及应用》较系统全面地阐述了数据库系统的基础理论、数据库系统是在计算机系统中引入数据库后的系统构成数据库系统,基本技术和基本方法,共分11章和2个附录。
既可以作为高等院校计算机、软件工程、信息安全、信息管理与信息系统、信息与计算科学等相关专业本科生数据库课程的教材,也可以作为电气工程相关专业研究生数据库课程及电力企业信息化教材。
Ⅷ 什么是关系数据库其特点是什么
数据库系统DBS(Data Base System,简称DBS)通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言、实用程序以及数据库管理系统。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。
数据库系统
数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。
数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。计算机的高速处理能力和大容量存储器提供了实现数据管理自动化的条件。
数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程牌,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使计算机走出科研机构进入各行各业、进入家庭。
数据库系统有大小之分,大型数据库系统有SQL Server、Oracle、DB2等,中小型数据库系统有Foxpro、Access。