《第四章数据库系统.docx》由会员分享,可在线阅读,更多相关《第四章数据库系统.docx(17页珍藏版)》请在课桌文档上搜索。
1、第四章数据库系统第01讲数据库系统第四章数据库系统数据模型厂数据库系统概述W关系模型与关系数据库数据效范化结构化杳询语占SQLltf述数据库的定义数据库的管理数据库系统数据库管理系统卬的SQL语言豺据表的定义数据表的管理I素引的建立与删除SQL语艺的数据查询功能噩鼐义与删除高级查询知识点一:数据模型模型的概念对现实世界事物特征的模拟和抽象就是这个事物的模型。作为模型应当满足:一是真实反映物质本身;二是容易被人理解;三是便于在计算机上实现。采用逐步抽象的方法,把数据模型划分为两类,以人的观点模拟物质本身的模型称为概念模型(或信息模型);以计算机系统的观点模拟物质本身的模型称为数据模型,如图所示。
2、现实世界|信息世界!机器世界知识点二:概念模型概念模型也称为信息模型。概念模型是从人对现实世界的认识出发,根据建模的需要将具体的事物抽象为便于理解和研究的模型。它独立于任何数据库管理系统,但是又很容易向数据库管理系统支持的逻辑数据模型转换。(1)常用术语实体:客观存在,并且可以互相区别的事物称为实体。属性:实体具有的特性都称为属性。实体属性越多,刻画出的实体越清晰。属性有“型”和“值”的概念,属性的名称(说明)就是属性的“型”,对型的具体赋值就是属性的“值”。码:在众多属性中能够唯一标识(确定)实体的属性或属性组称为实体的码。域:属性的取值范围称为该属性的域。实体型:用实体名及描述它的各属性名
3、,可以刻画出全部同质实体的共同特征和性质,被称为实体型。实体集:某个实体型下的全部实体,称为实体集。联系:一个实体型内部各属性之间的联系,称为实体型内部联系。在实体型之间也存在着联系,称为实体型的外部联系,这种联系是指不同实体集之间的联系。(2)实体型之间的联系一对一联系(1:1)一对多联系(1:n)O多对多联系(m:n)o(3)实体内部各属性之间的联系在一个实体型内部也存在着一对一、一对多和多对多的联系。(4)概念模型的表示方法描述概念数据模型的主要工具是E-R(实体一联系)模型,也称为E-R图。利用E-R图实现概念结构设计的方法称为E-R方法。E-R图主要是由实体、属性和联系三个要素构成的
4、。基本的图形符号,见表4-U表4-1E-R模型的图形表示符号含义.矩形表示实体,根卬埴写实体名菱形表示实体间联系,框中墉写联系名确图形表示实体或联系的属性,圈中填写属性名无向连接以上三种图形,构成具体默念模型知识点三:数据模型数据库管理系统支持的数据模型,可以细分为逻辑数据模型和物理数据模型。逻辑数据模型是用户通过数据库管理系统看到的现实世界,它描述了数据库数据的整体结构。逻辑模型通常由数据结构、数据操作和数据完整性约束三部分概念组成。数据结构是对系统静态特性的描述,是数据模型中最重要的部分,所以一般以数据结构的类型来命名数据模型。常用的数据模型有:层次模型、网状模型、关系模型以及面向对象数据
5、模型。格式化数据模型包括层次数据模型和网状数据模型,它们构成的层次数据库系统和网状数据库系统是第一代数据库系统。层次模型的主要特征如下:有且仅有一个无双亲的根结点;根结点以外的其他结点,向上仅有一个父结点,向下可有若干子结点。由于层次模型还不能很好地表达实体间的复杂关系(多对多联系),于是产生了网状模型,它很好地解决了实体间复杂关系的表达问题,其主要特征如下。允许有一个以上的结点无双亲;至少有一个结点有多个双亲。R4R5关系模型以人们经常使用的表格形式作为基本的存储结构,通过相同关键字段实现表格间的数据联系。关系模型简单明了、易学易用,使它从一开始就吸引了公众的注意,成为广大用户特别乐于接受的
6、、最重要的种数据模型。知识点四:关系模型的数据结构关系模型是一种新的数据模型,它建立在集合论和谓词演算公式的基础上。关系模型提供的逻辑结构简单,数据独立性强,存取具有对称性,操纵灵活。在数据库中的数据结构如果依照关系模型定义,就是关系数据库系统。关系数据库系统由许多不同的关系构成,其中每个关系就是一个实体,可以用一张二维表表示。例如一张“学生信息”数据表就是一个关系。C电性名Q性D元组V系别专业号专业,为名性别年龄学号财经系05财经J张三男19100215I信息系10IS息管理李四女20100078国经系23国际贸易王五女20120123计复机系07软件工程赵六男21112333关系:一张二维
7、表对应一个关系;属性:表中每一列叫做一个属性,属性有名和值的区别;元组:由属性值组成的每一行称为一个元组(记录);框架(FrameWork):由属性名组成的表头称为框架(关系型);域(Domain):每个属性的取值范围称为域;候选码(CandidateKey):可以唯一确定一个元组的属性或属性组称为候选码(可简称码)。如表中“姓名”属性;主码(PrimaryKey):一个关系中往往会有多个候选码,可以指定一个为主码;主属性(PrinIaryAttribute):可以作为候选码的属性也称主属性;非码属性(Non-keyAttribute):不能作为候选码的属性叫做非主属性;外部码(Foreign
8、Key):属性(或属性组)X不是当前关系的码,但却是另一个关系的码,则称属性X是当前关系的外部码,简称为外码;参照关系(ReferenCingRelation):外码所在的关系叫做参照关系;被参照关系(RCferenCedRelation):主码与另一个关系的外码相对应的关系叫做该外码的被参照关系,或叫做目标关系(TargetRelation)o对一个关系的描述可以称为一个关系模式,常常记作:关系名(属性1,属性2,属性3,属性n)在关系模型中,不但实体用关系表示,而且实体之间的联系也用关系来表示。如图所示的“顾客”和“商品”之间的多对多联系,在关系模型中可以表示为如下关系模式:顾客(顾客号,
9、姓名,性别)商品(商品号,商品名,单价)购物(顾客号,商品号,数量)知识点五:关系模型的基本要求关系模型要求关系必须是规范化的,也就是要求关系必须满足一定的规范条件。关系中每个分量必须是不可再分的基本项。换言之就是在一张表中不能嵌套另一张表。学院姓名性别年龄系别专业企业系工商管理李四男20会计系会计田小雅女19贸易系贸易经济马倩倩女20一个关系模型必须具备下面五个基本条件。表格中每一数据项不可再分,这是最基本项;每i列数据有相同的类型,即属性。各列都有唯的属性名和不同的属性值,列数可根据需要而设定;每列的顺序是任意的;每一行数据是一个实体诸多属性值的集合,即元组。一个表格中不允许有完全相同的元
10、组出现;各行顺序是任意的。知识点六:关系的完整性(I)实体完整性实体完整性规则:关系中的主属性不能取空值。例如,学生关系:学生(系别,专业号,专业,姓名,性别,年龄,学号)其中“姓名”和“学号”为主属性,所以这两个属性值就都不允许取空值。(2)参照完整性参照完整性规则:若参照关系中的外码与目标关系中的主码相对应,则参照关系中每个元组在外码上的每个属性值必须为空值,或者等于目标关系中某个元组的主码值。参照关系和被参照关系可以是同一个关系。例如,专业关系:专业(专业号,专业)在学生关系和专业关系之间存在联系,这种联系是通过属性“专业号”引用的。(3)用户定义的完整性所谓用户定义的完整性就是由用户根
11、据具体的应用环境,为某个关系数据库设定非约束条件。知识点七:关系操作1.传统集合运算传统集合运算主要有:并、交、差三种,如图所示。)M.S2.专门的关系运算专门的关系运算主要是选择(筛选)、投影和连接三种。选择运算是对关系表中元组(行)的操作,操作结果是找出满足条件的元组。投影运算是对关系表中属性(列)的操作,操作结果是找出关系中指定属性全部值的子集。连接运算是对两个关系的运算,操作结果是找出满足连接条件的所有元组,并且拼接成一个新的关系。知识点八:数据规范化规范化关系分为不同的规范层次。限制条件越严格,描述的关系就越规范。一般把关系的这种层次叫做范式,限制越严格的关系,范式就越高。一般将关系
12、范式划分为五个级别,分别称为一范式(INF)、二范式(2NF)、三范式(3NF)、BC范式(BCNF).四范式(4NF)和五范式(5NF),其中NF是(NOnnaIFOnTI)的缩写,BC范式(BCNF)是三范式(3NF)的修正和扩充。最低范式是一范式,一个关系只要满足了关系模型的5条基本要求,就已经达到了一范式。各范式之高一级范式的关系模式总是包含在低一级范式的关系模式中,可以用表达式描述各范式间关系:5NF4NFBCNF3NF2NFe1NEREVOKE数据控制2.SQL数据库的术语(1)表在SQLServer2000关系数据库中的术语和传统的关系模型术语不同,与ViSUaIFoXPro中的
13、术语也有差别。为了后面叙述的方便,在这里统一说明。表4-13术语对应表关系模型SQLServer2000VisualFoxPro关系模型SQLServer2000VisualFoxPro关系表数据表(表)框架结构结构元组行记录主码主键主索引属性列字段候选码键候选索引(2)数据库关系数据库是支持关系模型的数据库,一个关系数据库中包含了若干个关系。一般的SQL数据库是基本表的汇集,包含了基本表、视图和索引等。(3)索引索引是依据数据表中某个关键字或关键字表达式值的顺序,使数据表中的记录有序排列的一种技术。(4)关键字作为创建索引的表达式一般叫做关键字,而关键字表达式可以由数据表的一个列(字段),或
14、者由若干个列(字段)及变量、函数等组成。(5)视图视图是一种特殊类型的表,它往往由一个或多个表(或视图)中的部分字段或部分记录导出;但是视图并不会被作为一个完整的数据集合存放在存储器中,虽然从用户的角度看,视图也像表一样有自己的名字和相应的列(字段)、行(记录),具备了一般数据表的特征;可是实际上,它只是在数据库中存放了相应的视图定义,这些数据实际上仍然存放在导出视图的那些表中。所以视图可称为“虚表”,或逻辑表,但是用户完全可以把它当作实体数据表使用。知识点十二:数据库的定义例1:创建一个学生管理系统的数据库:“学生10,全部参数都采用默认值。CREATEDATABASE学生10在“查询”下拉
15、菜单或快捷菜单或工具栏中单击“执行”选择命令或按钮,执行上述语句命令,建立简单数据库文件。屏幕上显示执行过程信息:CREATEDATABASE进程正在磁盘,学生10上分配0.75MB的空间。CREATEDATABASE进程正在磁盘学生10og上分配0.49MB的空间。如果需要将文件放置在指定路径(如E盘的“测试”目录)下,那么起码应当将上面的语句命令更新为:CREATEDATABASE学生10ON(NAME=学生10,FILENAME=E:测试学生10.MDF)执行后,在指定路径“E:测试中,将建立数据库文件“学生10.MDFw和事务日志“学生,。知识点十三:数据库的管理1 .显示数据库信息在
16、SQLServer2000中启动查询分析器,在查询窗口输入系统存储过程命令。命令格式:SPjiELPDB数据库名Spjelpdb学生io在工具栏中单击“执行”按钮,数据库的信息将作为结果显示。2 .配置数据库可以使用系统存储过程命令实现。命令格式:SP_DBOPTION数据库名,选项名,值要使数据库成为只读单用户的,可在查询分析器的查询窗口输入两条更改数据库选项的系统存储过程命令:SP_DBOPTION学生10,READONLY,TRUESP_DBOPTION学生10,4SINGLEUSER,TRUE3 .重新命名命令格式:SP_RENAMEDB原名,新名如果想将数据库“学生10”改名为“ST
17、UDENT10,可以执行命令:SP_RENAMEDB,学生10,iSTUDENT10,4 .删除数据库命令格式:DROPDATABASE数据库名比如可以在查询分析器中执行下面的命令。DROPDATABASE学生10如果数据库“学生10”是关闭的,那么它的所有文件都将被彻底删除。因为这种删除是不可逆的,所以在删除前一定要仔细检查。知识点十四:数据类型在SQLServer2000表中各列的数据类型可以是:CHAR:按固定长度存放字符。VRCHR:与CHAR类似,但不按固定长度存放字符。INT:整型数。用来存放整数FLOAT:浮点数。用来存放实数。DATETIME:日期时间。存放日期和时间信息。知识
18、点十五:数据表的管理1.查看表结构:SPJIELP0BJNAME=name0BJNAME=NAME可以用来指定需要显示信息的对象名。5 .修改表结构ALTERTABLE表名ADDIALTERCOLUMNDROPCOLUMN类型(长度)NULLNOTNULL.6 .创建表:CREATETABLEV表名7 .删除表:DROPTABLEV表名8 .插入数据:INSERTINTO表名VALUES(“属性值”)INSERT表名(“属性)VALUES(“属性值”)9 .更新数据:UPDATE表名SET属性/属性值WHERE属性=属性值10 删除数据:DELETEFROMV表名WHEREV条件知识点十六:索
19、引的建立与删除索引是独立于表的、物理的数据库结构,它仅仅是原表中很小的一个子集。由一列或多列值以及这些值联系原表相应数据行的逻辑指针组成的集合称为索引表(页面)。索引表比数据表占用的存储空间要小得多,创建的速度也快得多。1 .索引的种类(1) SQLServer2000中的索引种类可以分为聚集索引和非聚集索引两个基本类。聚集索引。聚集索引相当于物理排序,它对表的数据行重新排列,并替换原表重新存储到磁盘上,所以它占用的空间甚至比原表还要大。一个表只能创建一个聚集索引,由于数据行的逻辑顺序与物理顺序是一致的,所以查询效率是最高的。非聚集索引。非聚集索引是完全独立于数据表的结构,每个表最多可以建立2
20、49个非聚集索引。由于一般表的数据会常常变动,为了不影响效率,一般只创建34个。非聚集索引还可以细分为:单列索引一一依据表中单个列建立的索引称为单列索引。复合索引一一依据一个表中两个以上列的组合(最多16列)建立的索引叫做复合索引。唯一索引一一要求索引列的值(包括NULL)是不能重复的,若是复合索引则要求组合列值不能重复。非唯一索引一一索引列值可以重复的索引。(2) VisualFOXPrO中的索引种类主索引。要求索引字段或字段组合表达式值能够唯一地确定数据表中一条记录。主索引只能在数据库表中创建和使用,而且一个数据表只能指定一个主索引;候选索引。候选索引像主索引一样,要求索引字段或字段组合表
21、达式值能够唯一地确定数据表中一条记录。但是一个数据表允许建立多个候选索引;普通索引。普通索引允许数据表中各记录的索引字段或字段组合表达式的值相同;唯一索引。唯一索引是为保持与低版本软件的兼容性而保留的一种索引类型。2 .索引的创建在ViSUalFOXPro中没有提供创建索引的SQL语句,在SQLServer2000中有完整的创建索引语句。在定义表或修改表结构时,若通过设置PRIMARYKEY约束定义主键,系统会自动创建主键索引且是唯一的;在设置UNlQUE约束时,系统也将自动创建唯一索引。否则可以使用命令创建。命令格式:CREATEUNIQUECLUSTEREDINDEXV索引名ONV表名(列
22、名ASCIDESC,)WITHDROP.EXISTING说明:选项UNIQUE指定为表创建唯一索引;选项CLUSTERED指定为表创建聚集索引,忽略则创建非聚集索引;选项ASClDESC指定升序或降序,忽略时为升序;选项WITHDR0P_EXISTING对当前索引删除并重建。3 .索引的删除在SQLServer2000中删除索引的语句命令如下。命令格式:DROPINDEXV表名.V索引名,知识点十七:视图的定义与删除视图是从一个或多个表或视图中导出的表,是根据用户的要求定义的;但是并不存在真正的数据集合,只是保存了一组查询条件的程序,所以它是逻辑表,也称为虚表。视图可以为用户集中自己需要的数据
23、,简化用户对数据的查询处理,并简化用户权限的管理,屏蔽数据库的复杂性,便于数据的共享。1.定义视图在SQLServer2000中视图的定义命令如下。CREATEVIEWV视图名(列名1,列名2,)WITHENCRYPTIONAS查询语句WITHCHECKOPTION选项网THENCRYPTlON可以使系统为创建的视图加密,选项WITHCHECKOPTlON可以防止用户对视图进行增、删、改时,对不属于视图范围内的基本表数据误操作,系统会自动检查视图中定义的条件,若不满足就拒绝执行。4 .视图的删除视图可以随时删除,使用SQL命令删除很方便。在SQLServer2000中视图的删除命令如下。命令格
24、式:DROPVIEWV视图名,在ViSUalFOXPrO中的视图删除命令如下。命令格式:DROPVIElVV视图名通过比较可以看出除了SQLServer2000可以同时删除多个视图外,两条命令是一样的。知识点十八:查询查询(SELECT)是数据库最基本和最重要的操作,不论是在SQLSerVer2000中,还是在ViSUaIFoXPro中,都提供了两种查询数据的方法。一种是直接使用SELECT语句编制程序查询;另一种是使用查询设计器生成程序查询;但是本质上都是建立SELECT语言程序。1 .查询单表所有字段SELECT*EROMSTUDENT1SELECT*FROMKC2 .查询数据表的指定列:
25、SELECTXH,XM,CJAS成绩FROMSTUDENT1SELECTKMAS课程名,XFFROMKCQW3 .使用列表达式查询查询命令不但可以选择性地输出表中各列,也允许输出由列组成的表达式,甚至不含列名的表达式。在SQLServer2000中,查询表STUDENTI中XM列及4门课程的平均成绩,还要查每人的出生年份。SELECTXM1ROUND(CJ4,1)AS平均成绩,YEAR(GETDATE()-NLAS出生年份FROMSTUDENT4.查询结果排序输出查询表STUDENTI时要求先按年龄由小到大,再按总平均成绩由大到小显示学生信息。SELECT*FROMSTUDENT1ORDERB
26、YNL,CJ/4DESCSELECT*FROMSTUDENT1ORDERBYNLASC,CJ/4DESC(ooei 王璋 0m2审小啕O30O2i 等篝4 0T0W2aU11D3O11!丁 jcomS 1 U OTM1 BK hIOWQg具青仙 L ilItTOpg a. W(OOM IHM女 大H X R 食 文Sssss1119却20202021,2t2l5 .只输出部分行的查询查询表STUDENT1时要求按年龄由小到大排序后显示前3条学生信息,或显示前60%记录。SELECTTOP3*EROMSTUDENT1ORDERBYNLCJ三需尺 11: 女舞AB*食一SELECTTOP60PER
27、CENT*EROMSTUDENT1ORDERBYNLIn,cj:cq|ijHoiwSfJc1306三0IKnQI2M网*113llHU.IiOMiii*Aa3sou6 .满足逻辑条件的查询使用WHERE选项,按给定条件进行查询是最灵活的一种查询方式。表4T7条件运算符运算符号说明=、=、=、或!=、!、!比较运算NOT、AND、OR逻辑运算查询表Studenti中总成绩大于等于300分的男学生。SELECT*FROMSTUDENT1WHERECJ=300ANDXB=男查询课程表KC中XF字段值不为5的全部记录。SELECT*FROMKCWHEREXF!=5OB4.30条件直悔7 .查询含有空值
28、NULL的记录查询的条件也可以是空值NULLo语法格式应当是:ISNULL或ISNOTNULL查询表Studenti中性别xb为空的行。n In IRftt Z *SELECT*FROMSTUDENT1WHEREXBISNULL211O251*s真a3MnLLIimmWMlflIiJiiirau.显示KC表中KH数的第二位是2的所有课程记录。SELECT*FROMKCWHEREKHLIKE_2_10 .使用BETWEEN查询语法格式:NOTBETWEEN表达式1ANIx表达式2查询表Studenti中所有成绩在300320的学生。AND 320SELECT*FROMSTUDENT1WHEREC
29、JBETWEEN300XH加LBLCJ七SNjIIO70001王萍Tj11070002%即2J11070099率思云Vj11070192布卜明女女女男!8305NULL21320NUU20300MULL19318NULLrXHJl1030009臭着他11030021林琳11030111J*fK举11070018陈实篇Il1070022Iht设110701024AnmuL40kflti女女男男男男21321NULL20350WJLL20332NULL21372NUU21298WJUIL使用IN查询也可以使用IN限定查询的范围,其作用与使用逻辑符号“AND”与“0R”类似。语法格式:NOTIN(表
30、达式1,表达式2查询表Studenti中年龄是20或18的学生。女男女女男20 350 MULL20 332 WJLL18 305 NULL20 XO NULL20 341 NULLSELECT*FROMSTUDENT1WHERENLIN(20,18),j三磔*汨2IlIO3011l5HR举3J11070001王湾4J11070099李思云6111070102知识点十九:高级查询1 .连接查询在查询时就需要同时从多个表中抽取数据,这样的操作就是多表操作,可以使用连接查询实现。在SQLServer2000和ViSUaIFOXPrO中连接查询的命令格式是一样的。命令格式1:SELECTV列名表FR
31、OIV表1类型)JOINV表2ONV表1.列=V表2.列命令格式2:SELECTV列名表FROMV表1,表2WHEREV表L列=V表2.列连接查询的分类内部连接:只包含两个表中满足条件的全部记录。右连接:包含满足条件的全部记录及右端表全部记录。左连接:包含满足条件的全部记录及左端表全部记录。完全连接:除重复记录外,左右表中记录全部包含在连接表中。通过表STUDENT和COURSE查询每个学生所选课程。XFJSB1H022经济法112342B!23会计学321313109计翼机SM364444英语373235Tj1166理学22312601信息系统2212119 91 MjLL ITOLLX20
32、l18 93 ML VULLKI5022 90 KUU WULLKl 0920 88 KUIX mu.110922 99 HULL K20121 95 BULL IraLL115620 95 HULL NULLHIM男女男女男勇力 阴白云 八兵小明名 7 8 2.171 6 8 9 0 12 5 0101010202020220202020202020l234*gb)可以使用命令格式2的形式实现上述操作,执行命令。SELECTST.XM,ST.XB,KMFROMSTUDENTASST,COURSEASCOWHEREST.KH=CO.KHSELECTXM,XB,KMFROMSTUDENTASST
33、JOINCOURSEASCOONST.KH=CO.KH2 .嵌套查询在SQL语言中,由Select-From-Where组成的结构称为一个查询块。在这个结构的where子句中如果再插入另一个查询块的查询方式称为嵌套查询。外层的查询叫父查询,内层的叫子查询,查询顺序,先子后父。使用in创建在SQLServer2000中,通过学生表STUDENT、课程表CoURSE和教师表TEACHER查询选择张晓晓老师(2312)课程的学生们。在查询分析器中执行命令。SELECT,2312,AS编号,张晓晓AS教师,XMAS学生FROMSTUDENTWHEREKHIN(SELECTKHFROMCOURSEWHE
34、REJSHIN(SELECTBHFROMTEACHERWHEREBH=2312,)执行结果如图所示。一;切厂!亘iJW2MMMIQ3.联合查询所谓联合查询是指利用集合的并运算,实现一个表内或两个及以上表之间的合并查询。具体就是将两个或多个SELEeT语句的查询结果,通过UNK)N子句合并为一个结果集。所以要求两个表的列名及顺序都一样,并且列的类型也应当兼容。语法格式:V查询语句UNIONALL查询语句UNIONALLV查询语句说明:选项ALL可以使输出结果保存全部行,忽略则自动删除重复行。结果集中的列名来自第一个查询语句。如果包含ORDERBY子句,将对最后的结果集排序。所有查询中的列名和列顺序必须完全相同。在SQLServer2000中,两个班级的学生表STUDENTl和STUDENTA如图所示,将两个班级中成绩大于等于350分的学生挑出来组成一个参赛明星队。21Aa um1iaal *MiR 盒 M1R1t2篇慧 xm nnNt4 2 6巾 女.女男男女在查询分析器中执行命令。SELECTXH,XM,XB,CJFROMSTUDENT1WHERECJ=350UNIONSELECTXH,XM,XB,CJFROMSTUDENT_AWHERECJ=350I.HUXBCJ;11030012王案若11030021林琳f111030121林扫fl1070018jl1070112张小明