第三章关系数据库
- 格式:doc
- 大小:139.50 KB
- 文档页数:10
第三章关系数据库标准语言SQL语言一、选择题1. 在SQL语言中授权的操作是通过________________语句实现的。
C A.CREATEB.REVOKEC.GRANTD.INSERT2. 假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。
要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系____。
DA.S B.SC,C C.S,SC D.S,C,SC3. 在 MS SQL Server中建立了表 Student(no,name,sex,birthday),no为表的主码,其他属性的默认值为 null。
表中信息如图所示:能够正确执行的插入操作是________。
A No Name Sex Birthday 101 张丽丽女 1967/05/07 102 李芳女 1970/04/14103 王朋男 1982/10/27 A.INSERT INTO student (no,sex) VALUES(102,′男′) B.INSERT INTO student (name,sex) VALUES(′王中′,′男′)D.INSERT INTO student VALUES(106,′王中′,′男′,′1984/03/08′) C.INSERT INTO stude nt VALUES(102,′男′,′王中′,′1984/03/08′) 4. SQL语言中,删除一个表的命令是________。
B A. DELETE B. DROP C. CLEAR D. REMORE 5. 为数据表创建索引的目的是________ AA.提高查询的检索性能B.创建唯一索引C.创建主键D.归类6. 在SQL语言中,条件“RETWEEN 20 AND 30”表示年龄在20到30之间,且________A. 包括20岁和30岁B. 不包括20岁和30岁C. 包括20岁不包括30岁D. 不包括20岁包括30岁7. 为了使索引键的值在基本表中唯一,在建立索引语句中应使用保留字________ AA. UNIQUEB. COUNTC. DISDINCTD. UNION 8. 下面关于SQL语言的说法中,哪一种说法是错误的? ________ AA. 一个SQL数据库就是一个基本表B. SQL语言支持数据库的三级模式结构C. 一个基本表可以跨多个存储文件存放,一个存储文件可以存放一个或多个基本表D. SQL的一个表可以是一个基本表,也可以是一个视图二、简答题1. 什么是基本表?什么是视图?两者的区别和联系是什么?【解答】基本表是本身独立存在的表,在SQL中一个关系就对应一个表。
第三章关系数据库一、单项选择题1、实体是信息世界中的术语,与之对应的关系数据库术语为(A)。
A、元组B、数据库C、字段D、文件2、关系数据表的主关键字由(D)个字段组成。
A、一个B、两个C、多个D、一个或几个3、在概念模型中,一个实体集对应于关系模型中的一个(D)。
A、元组B、字段C、属性D、关系4、下列叙述中,(A)是不正确的?A、一个关系中可以出现相同的行B、关系中的列称为属性C、关系中的行称为元组D、属性的取值范围称为域5、下列关于关系模式的码的叙述中,(C)是不正确的?A、从候选码中选出一个作为主码,在关系中只能有一个主码B、主码可以是单个属性,也可以是属性组C、在关系中只能有一个候选码D、若一个关系模式中的所有属性构成码,则称为全码6、关于关系模式的关键字,以下说法正确的是(B)。
A、一个关系模式可以有多个主关键字B、一个关系模式可以有多个侯选关键字C、主关键字可以取空值D、关系模式必须有主关键字7、在关系数据库中,关系是指(D)。
A、视图B、属性C、实体D、二维表8、如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示(A)。
A、所有可能选课的情况B、所有学生选部分课程的情况C、所有课程被部分学生选课的情况D、均不是9、如果集合A含2个元素,集合B含3个元素,则A与B的笛卡尔积包含(B)个元素。
A、2B、6C、3D、510、数据的完整性是指(C)。
A、数据的存储和使用数据的程序无关B、防止数据被非法使用C、数据的正确性、一致性D、减少重复数据11、关系模型中有三类基本的完整性约束,定义外部关键字实现的是(C)。
A、实体完整性B、域完整性C、参照完整性D、实体完整性、参照完整性和域完整性12、某表的性别字段只能输入男或女,属于(B)约束。
A、实体完整性B、域完整性C、参照完整性D、实体完整性、参照完整性和域完整性113、关系代数运算是以(C)为基础的运算。
A、关系运算B、谓词演算C、集合运算D、代数运算14、对关系s和关系r进行集合运算,结果中既包含s中元组也包含r中元组,这种集合运算称为(A)。
一、选择题1.SQL语言是()的语言,容易学习.BA. 过程化B.非过程化C.格式化D.导航式2.在视图上不能完成的操作是()。
CA.更新视图B.查询C.在视图上定义新的表D.在视图上定义新的视图3.SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREA TE、DROP、ALTER语句是实现哪种功能()。
CA.数据查询B.数据操纵C.数据定义D.数据控制4.SQL语言中,删除一个视图的命令是()。
BA.DELETEB.DROPC.CLEARD.REMOVE5.在SQL语言中的视图VIEW是数据库的()。
AA.外模式B.模式C.内模式D.存储模式6.下列的SQL语句中,()不是数据定义语句。
DA.CREA TE TABLEB.DROP VIEWC.CREA TE VIEWD.GRANT7.若要撤销数据库中已经存在的表S,可用()。
CA.DELETE TABLE SB.DELETE SC.DROP TABLE SD.DROP S8.若要在基本表S中增加一列CN(课程名),可用()。
CA. ADD TABLE S (CN CHAR(8))B. ADD TABLE S ALTER (CN CHAR(8))C. ALTER TABLE S ADD CN CHAR(8)D. ALTER TABLE S (ADD CN CHAR(8))9.学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。
要在表S中删除一个属性“年龄”,可选用的SQL语句是()。
BA.DELETE Age from SB.ALTER TABLE S DROP COLUMN AgeC.UPDA TE S AgeD.ALTER TABLE S ‘Age’10.有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。
其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄,C#是课程号,CNAME是课程名称。
第三章关系数据库标准查询语言SQL●3.1 SQL概述●3.2数据定义语言(DDL)●3.3 SQL的数据查询(DML)●3.4 SQL的数据更新(DML)●3.5视图●3.6数据控制语言(DCL)●3.7嵌入式SQL语言●3.8 存储过程*(T-SQL)3.1 SQL概述●SQL(Standard/Structured Query Language)是关系数据库标准●1986年10月,美国国家标准局(American National Standard Institute ANSI)公布第一个标准ANSI X3.135-1986,国际标准化组织(International Organization for Standardization ISO)也通过这一标准称SQL-86●1989年ANSI再次公布标准ANSI X3.135-1989 ,ISO 相应SQL-89●1999年,ISO公布SQL-1999(SQL99,SQL3)●2003年,ISO公布SQL-20033.1.1 SQL语言的组成●数据定义(DDL Data Definition/Description Language )–定义数据库的逻辑结构,包括基本表、视图、索引等●数据操纵(DML Data Manipulation Language)–包括查询和更新,更新又包含插入、删除和修改●数据控制(DCL Data Control Language )–授权、完整性规则描述、事务控制等●嵌入式SQL(ESQL)–在宿主语言中使用SQL的规则3.1.2 SQL语言的特点●综合统一:集DDL、DML、DCL于一体,语言风格统一●面向集合的操作方式:操作对象、查询结果都可以是元组的集合●高度非过程化:存取路进透明。
●以统一的语法结构提供两种使用方式:自含式、嵌入式●语言简洁,易学易用,主要共使用11个关键词–DDL:create drop alter–DML:select insert delete update–DCL:grant revoke commit rollback3.2数据定义语言(DDL)3.2.1定义、删除与修改基本表定义基本表语法CREATE TABLE <表名> (<列名><数据类型>[列级约束条件][,<列名><数据类型>[列级约束条件]... ...][,<表级完整性约束条件>])例:CREATE TABLE S(S#CHAR(5)NOT NULL UNIQUE,SN CHAR(20),SA INT,SD CHAR(3),PRIMARY KEY (S#));修改表语法ALTER TABLE <表名>[ADD <新列名><数据类型>[列级约束条件]] [DROP <完整性约束条件>][MODIFY <列名><数据类型>];例:ALTER TABLE S ADD SCome DATE;ALTER TABLE S MODIFY SA SMALLINT; ALTER TABLE S DROP UNIQUE(S#);删除表语法DROP TABLE <表名>例:DROP TABLE S3.2.2建立和删除索引索引的建立语法CREATE [UNIQUE][CLUSTER] INDEX <索引名>ON <表名>(<列名1>[<次序>][,<列名2><次序>... ...])<次序>可以是ACS和DESC例:CREATE UNIQUE INDEX S_S# ON S(S#)CREATE UNIQUE INDEX C_C# ON C(C#)CREATE UNIQUE INDEX SC_S#_C# ON SC(S#ASC,C# DESC)索引的删除语法DROP INDEX [<表名>.]<索引名>DROP INDEX [S.]S_S#3.3 SQL的数据查询(DML)●关系代数表达式∏A1,A2,.....An(δF(R1×R2×... ...×R n)) ●SQL 语句SELECT A1,A2,......A nFROM R1,R2,... ...R mWHERE F详细语法SELECT [ALL|DISTINCT] {*|<目标表达式1> [,<目标表达式2> ... ...]}FROM <表名或视图名1> [,<表名或视图名2>]... ...[WHERE <条件表达式>][GROUP BY <列名表达式1>[,<列名表达式2>]][HAVING <条件表达式> ][ORDER BY <列名表达式1> [ASC|DESC]], <列名表达式2> [ASC|DESC]]执行过程1)先按WHERE子句条件从FROM子句指定的表/视图中找出满足条件的元组(选择);2)再按SELECT子句中的目标表达式选择出元组中的属性,形成结果表(投影);3)如有GROUP子句,则将结果按<列名表达式>的值分组,该<列名表达式>值相等的元组为一个组,通常会在每组中使用聚合函数。
第3章关系数据库本章学习目标本章深入地讨论了关系数据库系统的基本概念、函数的依赖关系,并在此基础上介绍了关系规范化理论,以及关系数据库的基本元素,如实体、关系、表、关键字、索引等。
通过本章学习,读者应该掌握以下内容:●掌握函数的依赖关系(完全函数依赖、部分函数依赖和传递函数依赖)●候选关键字,关键字和主属性的基本定义●关系规范化的理论,掌握范式的基本概念和分解方法3.1基本概念按关系数据模型组织的数据库是关系数据库。
其理论基础是集合代数。
按集合代数理论,关系名及其属性序列称为关系模式或关系的型。
一个元组为其所属关系模式的一个值,对应一个实体或一组联系。
元组中每一个分量对应该实体或联系的一个属性值。
例如一个关系名为RELATION,其属性有attrl,attr2,…,attrN则关系模式简单写成,RELATION(attr1,attr2,…,attrN),其一个属性或若干属性取值的集合称为域,同一域中数据是同质的,例如性别域{男,女} ,姓名域{张,王,林,…彭}等。
各域各取一值的完全组合称为这些域的笛卡尔积。
例如图3.1所示,性别域和姓名域的笛卡尔积为C。
一般说来,域D1和域D2的笛卡尔积是一个表,其属性为原D1域和D2域所有属性的集合,其行数为D1域值的个数和D2域值个数的乘职,每一行由D1和D2各取一值组成,所有各行均不重复。
如果给定一组域D1,D2,…D n,这些域中允许有相同的。
则D1*D2*…*Dn={(d1,d2,…dn)︱di∈Di,I=1,2,…n} ,其中每一个元素(d1,d2,…dn)叫做一个N元元组,或简称为元组。
元素中的每一个值叫作元组的一个分量,也是它所对应的那个属性的一个值。
多个属性构成的关系是这些属性所属域的笛卡尔积的子集,一般说来只有其真子集才有意义。
图3.1的关系中同一位老师的性别不可能既为男又为女,因而C中只有一半元组是有意义的。
图3.1 关系的笛卡尔积按数据库理论,所有关系模式的集合(包括关系名,属性名,关键字,完整性约束和安全性要求)称为关系数据库模式,它表示一个关系数据库的逻辑结构。
关系数据库模式中所有关系模式的具体关系的集合称关系数据库。
关系数据库模式是数据的型的表示,而关系数据库则是数据的值的表示。
数据库中的关系应具备如下性质:1.每一列中的分量来自于同一个域,是同一类型的数据。
2.不同的列可来自于同一个域,每一列称为属性,要给予不同的属性名。
3.列的顺序的改变不改变关系。
4.在一个关系中任意两个元组不能全同。
5.元组次序可以任意交换而不改变关系。
6.每一分量必须是不可再分的数据项,即具有原子性,表1.9所示的重复组、向量和表1.10所示重复组结构都是关系不允许的结构。
3.2 函数依赖3.2.1 函数依赖概念关系理论中函数依赖是指关系中属性间的对应关系。
如关系中对于属性(组)X的每一个值,属性(组)Y只有唯一的值与之对应,则称Y函数依赖于X,或称X函数决定Y。
记作X→Y 。
其中,X称为决定因素。
例如表1.2所示“系”关系中:系代码→系名,系代码→系地址,系代码→系电话,系代码→系专业设置如果系名值是唯一的,即各系名均不相同,那么还有函数依赖集还可加入:系名→系代码,系名→系地址,系名→系电话,系名→系专业设置显然系地址对任何其他属性皆不是决定因素,因为系地址为“机电二楼”时对应任何属性都有两个不同值。
决定因素可能为两个以上属性构成的属性组。
例如在表1.7的“成绩”关系中,课程号不是决定性因素,每门课都有许多学生学,同一个课程号有多个学号、多个分数与之对应。
学号也不是决定性因素,同一个学生要学习多门课程,因此一个学号有多个课程号,有多个分数值与之对应。
只要每个学生每门课只有一个成绩,那么学号和课程号的值的集合在这个表中就是唯一的,任何两个元组中学号与课程号的值都不会相同,只要学号和课程号都确定,与之对应的分数值也唯一确定。
因此,学号+课程号→分数。
在表1.6“课程”关系中只有两行的课程名是相同的,但也因此存在这样的情况,当课程名为C 语言时,课程号有两个值与之对应,因而课程名不能唯一确定课程号。
我们在分析函数依赖时一定要全面分析了解在实际应用中属性和属性组全部取值可能,只要存在一个元组的某个属性值不能唯一决定另一个属性的值,另一个属性对这个属性的函数依赖关系就不成立。
在一个关系中,如果一个属性(组)值不唯一,则这个属性(组)与任何属性(组)的函数依赖关系中,它都不是决定因素。
3.2.2 部分函数依赖在一个关系中,可分析出许多依赖关系,但存在依赖程度的不同。
例如表1.6中,显然有课程号→课程名,课程号→开课教研室代码。
从另一角度看,只要课程号一定,同时课程名确定,开课教研室也就唯一确定。
因此课程号+课程名→开课教研室代码。
但它与前述课程号→开课教研室代码是不同的,因为{课程号,课程名}存在真子集:“课程号”,课程号→开课教研室代码。
我们把课程号+课程名→开课教研室代码称为“开课教研室代码”部分函数依赖于课程号十课程名。
定义部分函数依赖为:若X,Y 为关系R 中的属性(组),如X →Y 且X 中存在真子集X ’(X ’≠X ∧X ’∈X),满足X ’→Y ,则称Y 部分函数依赖于X ,记作X p→Y 。
因而表1.6中(课程号+课程名)p→ 开课教研室代码。
3.2.3 完全函数依赖如X,Y 是关系R 中属性(组),X →Y 的任何真子集X’(X’≠X ∧X’∈X ),都有X’ Y ,则称Y 完全函数依赖于X Y 。
我们前面所举的函数依赖例子中,除了“课程号+课程名”与其他属性之间的函数依赖之外的函数依赖皆为完全函数依赖。
3.2.4 传递函数依赖在一个学校中,每门课均是某一位老师教,但有些老师可教多门课,则有关系“教学”如下所示:表3.1 教学表由以上关系不难分析,课程名→职工号、职工号课程名,但职工号和其地属性的函数关系中都是决定因素,即职工号→老师名、职工号→性别,在这种情况下,职称、老师名传递函数依赖于课程名。
一般说来,如X、Y为关系R中属性(组),有X→Y,Y X但Y →Z,则称Z传递函数依赖于X,记作XT→Z。
上例中有:课程名T→职称;课程名T→老师名。
3.3 候选关键字与主属性3.3.1 候选关键字在前面我们曾给关键字定义:在关系R中,如属性(组)X唯一标识一条记录,则X称为关系R 的关键字,显然这个定义是不严密的。
从前面例中我们看到“课程号+课程名”能唯一标识一条记录,因为课程号就能唯一标识一条记录,课程号是关键字,课程号与课程名的集合不是关键字。
关键字的更严密定义是:在关系R中如记录完全函数依赖于属性(组)X,则称X为关系R中的一个候选关键字。
在表1.2中,“系代码”是关系“系”的候选关键字,表1.4中“职工号”是关系”教师”的候选关键字。
在表1.7“成绩”关系中,“学号+课程号”是候选关键字。
候选关键字有如下性质:1.在一个关系中,候选关键字可以有多个。
例如表1.2的系关系中,系代码、系名都是候选关键字。
2.任何两个候选关键字值都是不相同的,因为若有两条记录候选关键字的值相同,它和记录的关系就不是决定因素。
在实际应用中,只有在任何情况下值皆不重复的属性(组)才有可能是候选关键字。
由于同名同姓的人很多,在人事管理中,姓名一般不是候选关键字,我们需要设计代码例如“职工号”作为人事关系的关键字。
3.关键字可能由一个属性构成,也可能由多个属性构成。
关键字不可能再与其他的属性构成新的候选关键字。
我们分析一个关系中有哪些候选关键字时,一般首先一个个属性逐一分析判断,再两两判断,三三判断……等。
4.在任何关系中至少有一个关键字。
因为根据关系的基本要求,在一个关系当中任何二个元组不全同。
因而在一个N元关系当中如单个属性都不是关键字,任何两个属性的属性组也不是关键字,任何K (K<N)个属性的属性组都不是关键字,则该关系全部属性构成的属性组是其关键字。
3.3.2 主属性在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。
如一个属性不是构成该关系任何一个候选关键字的属性集的成员,就称它为非主属性。
例表1.7中,“学号+课程号”是关键字,那么“学号”是主属性,“课程号”是主属性,分数是非主属性。
3.4 关系规范化3.4.1问题的提出设计关系数据库时,一种方法是分析并找出E-R模型再转换为关系数据模型,最后求取关系模式。
称为自上而下设计方法。
另外也有采用自下而上设计方法的。
其方法是首先收集应用对象全部表格、凭证等各类数据,对它们的所有栏目归纳分类。
例如,人事部门的数据表有:●人事卡片,栏目有:职工号、姓名、性别、出生日期、职务、职称、基本工资、政治面貌、所在部门、入校时间,还有爱人有关情况:爱人姓名、单位地址、性别、出生日期…,有社会关系情况:姓名、与本人关系、出生日期、地址…。
●人员报表,栏目有:姓名、性别、年龄、职务、职称、部门、政治面貌。
有关职称职务工资计算办法,例如:处长800元,副处长740元,科长700元…,教授1000元,副教授900元…,同一职工如有职务又有职称,则职务工资取两个标准较高者。
财务部门有工资单,栏目有部门名、姓名、基本工资、职务工资、考勤补扣、行政费补扣、公积金等。
还有其他一些凭证、收据、发票、报表文件等。
对所有表的所有栏目汇总并经过分析可知所在部门、部门和部门名是同一概念,定义完全相同,可统一称之为部门名,年龄可由系统当前日期及出生日期计算得到,年龄依不同年份而不同,但一个人出生日期是只有一个值且不会改变。
职务工资可从职务、职称及有关职务工资计算办法求得。
由此我们可知,人事报表数据源来自人事卡片,工资单有部分数据源来自人事卡片,另有一些数据与生产部门、行政部门相关,且有各自计算方法。
最终可设想系统由三个关系构成:人事卡片(职工号,姓名,性别,出生日期,职务,职称,基本工资,政治面貌,部门名,参加工作时间,爱人名,爱人性别,爱人生日,爱人职务,爱人职称,爱人单位,爱人地址,关系人姓名,关系人年龄,关系人性别,与本人关系,关系人单位,关系人地址)考勤表(职工号,加班天数,早班数,中班数,晚班数,病假天数,旷工天数)行政收费表(职工号,房租费,水电费,电话费,行政扣除,行政奖励)但在按此模式建立数据库后在录入数据时发现有几个问题:①在使用中,对爱人情况和社会关系有关数据查找取用次数极少。
②不少人尚未结婚,但表中仍需留下大量空位,使数据库文件规模扩大,影响效率。
③不少人社会关系人很多,如要对关系人利用数据库系统进行查找,必须对不同关系人数据分段存放,如表3.2所示。
表3.2 人事卡片表显然一个职工数据多行重复存放,出现了严重冗余。
这种冗余使表格文件规模增加了数倍,使检索速度降低,在数据录入和修改时需同时修改多处相关数据,工作量大且易出错。