数据库系统概率

第一章、数据库系统概述
本章要点:

         1、通过理解数据库系统主要特点,初步了解数据库系统全貌。

         2、了解关系、关系模型、关系数据库系统等基本概念。

         3、了解数据库管理系统的组成和各部分的基本功能。

         4、初步理解本章中提到的有关数据库的专业术语。

         5、了解数据库系统体系结构以及数据库系统运行过程。
  


1。1            有关数据库的基本概念  
  

一、数据:凡是计算机中用来描述事物的记录,都可以统称为数据。

三、数据库:数据库是长期储存在计算机内的、有组织的、可共享的数据集合。

四、数据库管理系统:由一个互相关联的数据的集合和一组用于访问这些数据的程序组成,介于应用程序和操作系统之间的数据管理软件。    
         DBMS的主要功能包括:
                 1、数据定义         2、数据操纵         3、数据库的运行管理         4、数据库的建立和维护
五、数据库系统:包括和数据库有关的整个系统:数据库、DBMS、应用程序以及数据库管理员和用户等等。也即:
                         DBS = DB + DBMS + APPLICATION + DBA + USER   
六、DBA的职责:
         (1)决定数据库中的信息内容和结构;(2)决定数据库的存储结构和存取策略;(3)定义数据库的安全性要求和完整性约束条件;
         (4)监控数据库的使用和运行;(5)数据库的改进和重组重构。   

         到底什么是数据库管理系统呢?你可以把数据库管理系统看成是一个仓库,在仓库里放着数据,还有一个仓库的保管员,这个保管员负责数据的搬进、整理和搬出。这样仓库、数据和保管员就组成了一个数据库管理系统,这里的仓库是“文件”,保管员是“管理软件”。仓库+数据就是数据库。
         这个保管员要做的事情很多,要检查输入的数据是否合法(数据的定义问题),如何摆放最好(数据的结构问题),如何更快地找到用户所需要的数据并提取出来(数据的操纵问题),数据如何不被坏人提走(数据的安全性问题)等等。有些时候可能会有多个人来提货,为了提高效率那么就可以一次拿几张单子,顺路把需要的数据都取出来(涉及到并发控制问题)。保管员所做的这些事情就是数据库管理系统需要做的事情。   


1。2            数据库管理技术的产生和发展
  

一、人工管理阶段特点
         1、由用户管理
         2、面向某一应用程序
         3、无共享、冗余度极大
         4、不独立、完全依赖于应用程序
         5、无结构
         6、由应用程序控制
二、文件系统阶段特点
         1、数据冗余和不一致
2、数据访问困难
3、数据孤立
4、完整性问题
5、原子性问题
6、并发访问异常
7、安全性问题

三、数据库系统阶段特点  
         1、数据的整体结构化。
         2、数据共享度高、冗余度小。
         3、高度的物理独立性和一定的逻辑独立性
         4、数据库管理系统(DBMS)对数据进行统一的管理和控制,提供数据安全性、完整性、并发控制和恢复能力。
         5、为用户提供了友好的接口。  


1。3         数据的模型

一、数据模型的分类
         根据模型应用的不同目的,将模型分为属于两种不同层次的两类模型:
         1、概念模型
         概念模型也称信息模型,是按用户的观点对数据和信息建模的,主要用于数据库设计。
         2、数据模型
         数据模型是按计算机系统的观点对数据建模的,主要用于DBMS的实现。它主要包括层次模型、网状模型和关系模型等。
         其中数据模型是数据库系统的核心和基础。

二、数据模型的组成要素
         1、数据结构
         数据结构是所研究的对象类型的集合,是对系统静态特性的描述。数据结构的类型有层次结构、网状结构和关系结构,分别对应三种数据模型为层次模型、网状模型和关系模型。
         2、数据操作
         数据操作是指对数据库各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有关的操作规则。是对系统动态特性的描述。
         3、数据的约束条件
         数据的约束条件是一组完整性规则的集合。


三、概念模型  
         1、信息世界的基本概念
         (1)实体(Entity):指客观存在并可相互区别的事物。比如学生、学生的一次选课、学生与系的关系等。
         (2)属性(Attribute):指实体所具有的某一特性。若干属性可以刻画一个实体,例如部门实体可以由部门号、部门名称等属性组成。
         (3)码(Key):指唯一标识实体的属性集。比如部门号是部门实体的码。
         (4)域(Domain):指某一属性的取值范围。如部门名称的域为字符串集合。
         (5)实体型(Entity type):指用实体名及其属性集合来抽象和刻画同类实体。如部门(部门号、部门名称)就是一个实体型。
         (6)实体集(Entity set): 指同类实体的集合。如全体部门就是一个实体集。
         (7)联系(Relationship):反映为实体(型)内部的联系和实体(型)之间的联系。
         两个实体型之间的联系分为三类:
                 (1)一对一(1:1);         (2)一对多(1:n);         (3)多对多(m:n)  
         2、概念模型的表示方法(实体-联系方法)
         数据库的总体概念结构可以用E-R模型中的E-R图来表示。E-R图由以下基本元素构成:
         (1)矩形:代表实体集;
         (2)椭圆:代表属性;
         (3)菱形:代表实体间的联系集;
         (4)线段:将属性与实体集相连或将实体集与联系集相连。除线段以外,每个元素上都标有它所代表的实体、属性或联系。
         3、概念模型的作用:
         概念模型是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员与用户进行交流的语言。   

         实体-联系模型属于基于对象的概念层数据模型。该模型的建立是模拟人们认识现实世界的过程,它将现实世界中的对象分为两类:实体和联系。除此之外,该模型还可以表示出数据库内容必须遵循的特定约束。例如映射的基数。

四、几种常见的数据模型
         1、层次模型
         满足以下二个条件的基本层次联系的集合:(1)有且只有一个结点没有双亲结点(这个结点叫根结点);(2)除根结点外的其他结点有且只有一个双亲结点。
         层次模型与网状模型类似,分别用记录和链接来表示数据和数据间的联系。与网状模型不同的是:层次模型中的记录只能组织成树的集合而不能是任意图的集合。
          层次模型可以看成是网状模型的特例,它们都是格式化模型。它们从体系结构、数据库语言到数据存储管理均有共同的特征。在层次模型中,记录的组织不再是一张杂乱无章的图,而是一棵"倒长"的树。
         2、网状模型
         满足以下二个条件的基本层次联系的集合:(1)允许一个以上的结点没有双亲结点;(2)一个结点可以有多个双亲结点。
         网状模型中的数据用记录(与Pascal语言中的记录含义相同)的集合来表示,数据间的联系用链接(可看作指针)来表示。数据库中的记录可被组织成任意图的集合。
         3、关系模型
         关系模型用表的集合来表示数据和数据间的联系。每个表有多个列,每列有唯一的列名。在关系模型中,无论是从客观事物中抽象出的实体,还是实体之间的联系,都用单一的结构类型——关系来表示。在对关系进行各种处理之后,得到的还是关系——一张新的二维表。

1。4         数据库系统结构

一、从数据库管理系统的角度看,可分为三层,从外到内依次为外模式、模式和内模式。
         1、 外模式:
         外模式又称为用户模式,是数据库用户和数据库系统的接口,是数据库用户的数据视图(View),是数据库用户可以看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
         2、 模式
         模式是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述。
         3、 内模式
         内模式又称为存储模式(Storage Schema),是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
  
二、为了实现三个抽象级别的联系和转换,数据库管理系统在三层结构之间提供了两层映象:外模式/模式映象和模式/内模式映象。  
         1、外模式/模式映象
                通过外模式与模式之间的映象把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系起来。  
         2、模式/内模式映象
                通过模式与内模式之间的映象把描述全局逻辑结构的模式与描述物理结构的内模式联系起来。

三 、三级模式结构的优点:使数据库系统中的数据能保持较高的物理独立性和逻辑独立性。

         对于一个仓库来说,东西需要经常搬进搬出,但是仓库本身的结构一般不会改变,而且存放东西的架子一般也不会改变。不同的东西所需要的架子是不一样的,也可以说是它们的"模式"是不同的。在某个架子上的东西对于这个架子的"模式"来说就是"实例"。
在数据库的三级模式中,逻辑模式和物理模式之间的关系可以看作是设计与实现的关系,而逻辑模式和子模式之间的关系可以看作是全局和局部的关系。

1。5          数据库技术的研究领域

一、DBMS软件的研制
         也就是说设计一个类似MS SQL Server的东东,听说国产的DBMS也有那么几个,不过我没用过,呵。
二、数据库设计
         主要的研究方向是数据库设计方法学和设计工具。
三、数据库理论
         主要集中于关系的规范化理论、关系数据理论等。

1。6         小结

         通过这章的学习,重新加深了对数据库概念方面知识的映象,重温了数据库技术的发展过程、数据模型的发展历程和数据库的三层体系结构。并对E-R图的表现有了进一步的认识。 

 

 

 

 

第二章     关系数据库

本章要点:   
          1、掌握关系模型的三个组成部分及相关的概念知识  
          2、了解关系数据结构及形式化定义的相关概念  
          3、了解关系的完整性定义  
          4、掌握关系操作各操作的含义及运算应用  
          5、熟练掌握和运用关系代数及关系演算进行运算

 

2.1 关系模型概述

一、关系模型的组成
          关系模型由以下三部分组成:关系数据结构、关系操作集合、关系完整性约束。
二、单一的数据结构:关系
三、关系操作
         1、关系操作的特点:集合操作方式,也即操作的对象和结果都是集合。
         2、关系数据语言的分类:
                                                      |————关系代数语言
                                                      |
                                                      |                                      |——元组关系演算语言
                  关系数据库语言——|————关系演算语言——|
                                                      |                                      |——域关系演算语言
                                                      |
                                                      |————SQL语言
         3、常用关系操作:
               (1)查询操作,包括:
                         集合运算:并、差、交
                         专门的关系运算:广义笛卡尔积、选择、投影、连接、除
               (2)增加、删除、修改操作
四、关系的三类完整性约束  
          (1)实体完整性;(2)参照完整性;(3)用户定义的完整性。

2。2 关系数据库结构及形式化定义

注意:在关系模型中,无论是实体还是实体之间的联系均由单一的结构类型即关系(表)来表示。是建立在集体代数的基础上的。

一、关系数据结构
1、域(Domain)
         一组具有相同数据类型的集合。例如SQL Server数据库中的数据类型我们可以看作是域。我们应该理解,最重要的问题不在于域自身是什么,而在于如何在数据库中使用域中元素,如字符和字符串、整型和实型等;另外,值null是所有可能域的成员,表明值未知或不存在。
2、笛卡尔积(Cartesian Product)
         笛卡尔积的定义:
                  D1*D2*...*Dn={(d1,d2,..., dn) | di∈Di, i=1,2,...,n}
         笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域。
3、关系
          关系表示为:R(D1, D2, … Dn),R为关系名称,n是关系的Degree。
          特殊的关系:单元关系(上式中n=1时)和二元关系(n=2时)。
          在数学上将关系定义为一系列域上的笛卡尔积的子集。这一定义与对表的定义几乎是完全相符的,唯一的区别在于我们给表中的属性赋予了名称,而关系则没有。由于表实际上就是关系,因而在关系模型中,用数学名词关系和元组来代替表和行。
         应理解之定义:
                 候选码(candidate Key)、主码(Primary Key)、主属性(Prime attribute)、非码属性(Non-key attribute)、全码(All-Key)。
         关系的三种类型:
                 基本关系(基本表或基表)、查询表和视图表。这我们可以从SQL Server和Access数据库中得知这三种类型的实例。
         基本关系的六条性质:
                (1)列是同质的(Homogeneous);(2)不同的列可出自同一个域,不同的属性要给予不同的属性名;(3)列的顺序是无所谓的;(4)任意两个元组不能完全相同,就是说表的任意两行不能完全相同;(5)行的顺序也是无所谓的,这就是为什么在sql server表中插入记录的时候为什么总是插入在最后一行的原因了;(6)分量必须取原子值,就是说每一个分量都必须是不可分的数据项。必须满足范式(Normal form)的要求。

二、关系模式
1、关系模式的定义:
         关系的描述称为关系模式,它是一个5元组,可以表示为:R(U, D, dom, F),其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
2、关系模式与关系的联系(实际应用中两者都称之为关系)
         关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的(不过有时我们仍需改变数据库的结构,所以只能说是相对稳定的);关系是动态的、随时间不断变化的,因为我们在不断的更新数据库中的数据。

三、关系数据库
         关系数据库有型(关系数据库模式)和值(关系模式在某一时刻对应的关系的集合)之分。在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。

2。3 关系的完整性

注意:实体完整性和参照完整性是关系模型必须满足的约束条件,也称为关系的两个不变性。

一、实体完整性(Entity Integrity)
         规则:若属性A是基本关系R的主属性(Primary Key),则属性A不能取空值。
        看到这应该不会再对SQL Server中设定为主键的属性为空时出错感到奇怪了吧?
         说明:
             (1)对象为基本关系
             (2)具有唯一标识性
             (3)主属性不能为空
二、参照完整性(Referential Integrity)
         外码(foreign Key):假设F是关系R的属性(一个或一组),但不是R的码。如果F对应于关系S的主码K,那么F就是关系R的外码。
         参照关系与被参照关系:上述中的R就是参照关系,S为被参照关系(或目标关系)。有时也可能是同一个。
         规则:若如上所述属性F是关系R的外码(对应关系S的主码K),则对于R中每个元组(表中的每行)在F上的值必须为以下两者之一
                 (1)取空值(每个都为空);(2)等于S中某个元组的主码值(也就是说值已经在K上存在)。
三、用户定义的完整性(User-defined Integrity)
         针对某一具体关系数据库定义约束条件。比如:身份证必须为15位或18位,年龄必须为整数等等。这样就无须再在应用程序中进行约束了。


2。4 关系代数

主题:
         关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用关系的运算来表达查询的。
         运算的三大要素:运算对象、运算符、运算结果。
         运算符种类:集合运算符(∪ - ∩)、专门的关系运算符(× σ   ∏ ∞ ÷)、算术比较符(> ≥ < ≤ = ≠)和逻辑运算符(┑ ∧ ∨)。


一、传统的集合运算符
         1、并(Union):R∪S={t|t∈R∨t∈S},t属于R或t属于S。
         2、差(Difference):R-S={t|t∈R∧t不属于S}。
         3、交(Intersection):R∩S={t|t∈R∧t∈S}。
         4、广义笛卡尔积:
         一般地,如果有关系r1(R1)和r2(R2),则关系r1×r2的模式是R1和R2串接而成的R。关系r(R)中包含所有满足下列条件的元组t:若t1∈r1,t2∈r2,则t由t1和t2拼接而成,且t[R1]=t1[R1],t[R2]=t2[R2]。

二、专门的关系运算
1、选择(Selection)
         选择运算给出满足给定谓词(条件)的元组。用小写希腊字母σ来表示选择运算,而将谓词写作σ的下标,并在σ后的括号中给出作为参数的关系。记作:
         σF(R)={t|t∈R∧F(t)='True'}
         例如,我们要找出职员表中所有广东省的员工,则写作:σ籍贯='广东'(职员表)。
         通常允许在选择谓词中进行比较,使用的比较运算符是=、≠、<、≤、>和≥。另外,还可以用连词and(∧)和or(∨)将多个谓词合并成一个较大的谓词。

        在关系代数运算中我们规定,凡是涉及到与空值null的比较,其结果都是false。在SQL Server 2000中,有一个关于空值处理的数据库选项ANSI_NULLS,它规定如下:
⑴将ANSI_NULLS设置为TRUE时:所有与NULL值比较的结果都是NULL;
⑵将ANSI_NULLS设置为FALSE时:如果两个参与比较的值都是NULL,那么比较的结果将是TRUE;否则如果只有一个值是NULL,那么比较的结果将是FALSE。


2、投影(Projection)
         关系R上的投影是从R中选择出若干属性列组成新的关系,投影后会取消原有关系中的某些列或玩组。记作:
                 ΠA(R)={t[A]|t∈R}
         例如,查询职员所在的姓名和部门:Π姓名,部门(职员表)。
3、连接(Join)
         从两个关系的笛卡尔积中选取属性间满足一定条件的元组。常用的有等值连接和自然连接两种。这里要记住,自然连接需取消重复列,其它连接操作只须考虑行。

        自然连接运算的计算过程分解如下:首先,自然连接运算形成它的两个参数的笛卡尔积;接着在笛卡尔积的结果上,基于两个参数的关系模式中都出现的属性进行属性相等的选择运算;最后还要去除结果关系模式中的重复属性,即关系模式中相同的属性在连接结果中只保留一个。
4、除(Division)  
         设r(R)和s(S)是两个关系,并且S≤R,即模式S中的每个属性都在模式R中出现。关系r÷s是模式R-S上的关系,即此模式中包含所有在R中而不在S中的属性。若元组t属于r÷s,当且仅当以下两个条件同时成立:
第一:t在∏r-S(R)中;
第二:对于s中的每一个元组ts,在r中都有元组tr同时满足以下两个条件:
① tr[S]=ts; ② tr[R-S]=t
特别要注意的是:①和②的含义是说r中的元组tr不仅在S上,而且在R-S上都有相同的值!即R-S中的元组t与S中的每一个元组ts的结对就是R中的元组tr 。

2.5 关系演算

主题:关系演算是以数理逻辑中的谓词演算为基础的。是一种非过程化语言。可分为:元组关系演算和域关系演算两种。
1、元组关系演算(代表语言ALPHA)
         元组关系演算的查询表达式为:
{t | φ(t)}
即,它是所有使谓词φ(t)为真的元组t的集合。在这里我们采用的是关系的元组变量t进行运算(这里隐含着t∈r),也就是说元组关系演算的结果是符合给定条件的元组的集合,也就是一个关系。
        元组关系演算的最初定义是由Codd在1972年给出的。元组关系演算以元组变量作为谓词变元的基本对象。一种典型的元组关系演算语言是E. F. Codd提出的ALPHA语言。这一语言虽然没有实际实现,但关系数据库管理系统INGRES所用的QUEL语言是参照ALPHA语言研制的,与ALPHA十分类似。

2、域关系演算(代表语言QBE)
域关系演算的查询表达式为:
{<x1,x2,…,xn>|φ(x1,x2,…,xn)}
其中x1,x2,…,xn代表域变量,φ代表演算公式。在这里我们采用的是域变量xi进行运算(这里隐含着xi从某个属性的域里取值,而不是从某个元组中取值),域变量从属性的域中取值,而不是从整个元组中取值。域关系演算的结果是符合给定条件的域变量值序列的集合,也就是一个关系。
        域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。1975年由M. M. Zloof提出的QBE就是一个很有特色的域关系演算语言,该语言于1978年在IBM370上得以实现。
QBE是Query By Example(即通过例子进行查询)的简称,其最突出的特点是它的操作方式。它是一种高度非过程化的基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,而查询结果也是以表格形式显示,因此非常直观,易学易用。


2。6     小结

         关系数据库是学习数据库系统概论的重点,此篇章非常详尽地介绍了关系代数、关系演算的相关知识,通过学习,对快要淡忘的各种运算方法又有了进一步的了解,相信对于理论知识的加强,在以后的工作中,能更快、更好的完成各项工作内容。以下是问题综述:
1、属性是用来描述实体集的,还是用来描述实体的?  
         属性是用来描述实体集的(如表中的字段名),具体到实体集中的每个实体而言就是这些属性的具体取值(字段值)。形式化地说,实体集的属性是将实体集中的实体映射到域的函数。
  
4 、在确定用实体集还是联系集时,一个可采用的原则是什么?  
        在确定用实体集还是联系集时一个可采用的原则就是:当描述发生在实体间的行为时最好采用联系集。
  
5 、关系和表是一回事吗?  
         严格地说,关系和表不一样。关系是一系列域上的笛卡尔积的子集,是一个集合。既然关系是集合就不允许在集合中有重复的元组。按照课件的解释表可以看成是由一行一行的内容组成的一个格式,每个表有多个列,每列有唯一的列名,而每个表也有一个唯一的名字。值得注意的是在关系数据库系统中,表中允许有重复的行存在,即允许有重复的记录。
  
6、NULL是表示一个属性值非法吗?  
         不对,NULL是一个合法的属性值。它表示该属性的值为空值,空值的含义有两层意思,一是表示属性没有值;二是表示属性的值未知。当属性值未知时还有两种情况,一是值缺失,表示属性有值,但是我们目前还没有该值的信息;二是不知道该属性有没有值。
  
7、 在关系代数和SQL中对查询结果的重复行的处理一样吗?  
         不一样。关系代数的运算结果仍然是一个关系,绝对不允许重复的元组在关系代数的结果中出现。而在SQL中,去掉查询结果中的重复行是一件非常耗时的操作,因此允许在SQL的查询结果中保留重复的行。可以通过DISTINCT选项说明SQL的查询结果是否要保留重复的行。   
8 、数据库中的视图和关系有什么区别?  
         视图是虚关系,在DBMS中只保存定义视图的SQL语句,而不保存视图的具体数据。当在查询中用到视图时,DBMS会根据其保存的视图的定义(即SQL语句)来得到有关的数据。如果在DBMS中保存视图的数据,这样的视图称之为实体化视图。而关系在DBMS中不仅存储有其定义,而且还存储有实实在在的数据。

 

 

 

第三章  關係數據庫標准語言SQL
本章重點:
         全面掌握和熟練運用SQL的DQL、DDL、DML、DCL進行相關的數據庫操作。

前言 SQL發展歷程  

         SQL的定義:Structured Query Language(結構化查詢語言),名為查詢,但其功能不僅僅是查詢。  
         SQL的提出:時間(1974年)、人物(Boyce、Chamberlin)  
         SQL應用的起源:時間(1975-1979)、人物(IBM的San Jose Research Laboratory)、作品(System r)  
         SQL標准的歷程:SQL-86、SQL-89、SQL-92、SQL-99(醞釀中)


3.1         SQL概述


3.1.1         特點  
         是一個綜合的、功能極強同時又簡捷易學的、集數據查詢(Data Query),數據操縱(Data Manipulation) ,數據定義(Data definition)和數據控制(Data Control)功能於一體的關係數據庫語言。
一、綜合統一  
         集DDL、DML、DCL的功能於一體,語言風格統一,可以獨立完成數據庫生命周期中的全部活動。
二、高度非過程化  
         講究“做什麼”,而無須知道“怎麼做”。
三、面向集合的操作方式  
         除了操作對象、查找結果是元組的集合,一次插入、刪除、更新操作的對象也可以是元組的集合。
四、以同一種語法結構提供兩種使用方式  
         既是自含式語言,又是嵌入式語言。
五、語言簡捷,易學易用  
         完成核心功能只用9個動詞,如下:數據查詢(Select)、數據定義(Create,Drop,Alter)、數據操縱(Insert,Update,Delete)、數據控制(Grant,Revoke)

3.1.2          SQL語言的基本概念  
         基本表:本身獨立存在的表。  
         視圖:從一個或幾個基本表導出的表,本身並不獨立存儲在數據庫中,是一個虛表。

3.2 數據定義         

3.2.1 定義、刪除與修改基本表   

Create Table Employees(  --建立職員表
Eno varChar(6) NOT NULL Primary Key, --主碼
Ename varchar(20) Unique,  --Unique條件約束
Esex varChar(1) NOT NULL,   
Eage
Int,  
Edept
varChar(20) NULL,  
Constraint pk_Eage CHECK (Eage>=18 and Eage<=90)  --建立年齡的條件約束
)  

Create Table Programs(  
Pid
varchar(8) Not Null Primary Key,  
Pname
varchar(40) Not Null Unique, --建立unique條件約束
Pdescription varchar(80) NULL  --允許為空
)  

Create Table Authority(  
Eid
varchar(6) Not NULL,  
Pid
varchar(8) Not Null,  
Adefinition
bit constraint df_pdefinition default (0), --默認為0
Adescription varchar(80) Null,  
constraint pk_auth_Eid primary key clustered(Eid,Pid),  
constraint fk_auth_Eid foreign key(Eid) Reference Employees(Eid) On Delete Cascade, --同步刪除  
Constraint fk_auth_Pid Foreign Key(Pid) Reference Employees(Pid),  
)  


二、修改基本表

--向Employees中增加“入職時間”列,其數據類型為日期型:  
        Alter Table Employees Add Ecome DateTime  
--將年齡的數據類型改為半字長整數:  
        Alter Table Employees Modify Eage Smallint  
--刪除職員姓名必須取唯一值的約束:
        Alter Table Employees Drop Unique(Ename)  

 

三、刪除基本表   
        

        Drop Table Programs         
   
/**//*說明:表一旦刪除,表中的數據、此表上建立的索引和視圖都將被刪除(但有的系統會保留視圖,如Oracle)。
       注意:如果此時Programs與Authority中存在關聯記錄的話,刪除programs會由於兩者間的條件約束而引起錯誤,不能成功;而
*/
  
        
Drop Table Employees   
   
/**//*則不會引起這樣的問題,因為兩者間存在同步刪除的條件約束,所以會成功刪除Employees中的記錄並且會同步刪除Authority中的相關記錄。 */

 

3.2.2 建立與刪除索引   

建立索引有助於查詢速度的提高。索引的種類:   
         普通索引:Index;   
         聚集索引:Clustured Index,索引項的順序與表中記錄的物理順序一致的索引組織;   
         唯一索引:Unique Index,索引的每一個索引值只對應唯一的數據記錄  


一、建立索引  
         索引可建立在一個表的一列或多列上,各列名之間用逗號分隔。列名後可用ASC或DESC指定排列次序。

--在Employees表的Ename列上建立一個聚集索引(SQL Server中默認在Primary Key上建立聚集索引):  
          Create Clustered Index EmpName ON Employees(Ename);   

--在Authority表中按職員號升序和子程序號子程序建立唯一索引:  
          Create Unique Index Auth_no ON Authority(Eid ASC,Pid DESC);

  
二、刪除索引  
         Drop Index <索引名>   

--刪除Employees表的EmpName索引:  
            Drop Index EmpName;  


鑒於上面建立的三個表中我們還沒有輸入數據,這裡就先看看數據更新部分,看如果向表中插入、修改和刪除數據。  

 

 

下文都建立在如下關係模式之上:  
職員表:Employees(Eid,Ename,Esex,Eage,Edept),主碼為Sno;  
子程序表:programs(Pid,Pname,PDescription),主碼為Pid;  
職員權限表:Authority(Eid,Pid,ADefinition,ADescription),主碼為(Eid,Pid)。  

說明:  
Eid:惟一標識職員表中每個職員的編號(統一6位字符),同時一個職員可有多個子程序的不同權限;  
Ename:職員姓名,最長20個字符;  
Esex:職員性別,一個字符,0表示男,1表示女;  
Pid:惟一標識子程序表中的每個子程序的編號(統一8位字符),同時一個子程序可以由多個職員操作;  
Pname:子程序名稱,最長40個字符;  
Pdescription:子程序描述,最長80個字符,允許為空;  
Eage:職員的年齡(整型,取值范圍為18到90);  
Edefinition:權限定義,是否有權限(為0或1,1表示有權限),默認為0;  
刪除職員表中職員時同時刪除職員權限表的相關記錄。  

  

一、建立基本表

 

        包括:定義表(Create Table,Drop Table,Alter Table)、定義視圖(Create View,Drop View)、定義引(Create Index,Drop Index) 。  
         從上面可以看出,標准SQL沒有提供修改視圖和修改索引定義的操作(而很多成熟的關係數據庫產品都對標准SQL進行了擴充,提供了視圖和索引定義的修改語句,如SQL Server所用的Transact-SQL)。

posted @ 2010-02-08 15:08  Daniel_Lu  阅读(575)  评论(0编辑  收藏  举报