您好,欢迎访问三七文档
数据库系统原理1陈岭浙江大学计算机学院关系模型2关系和关系模式关系代数扩展的关系代数运算数据库的修改关系模型关系数据库基于关系模型,是一个或多个关系组成的集合关系通俗来讲就是表(由行和列构成)关系模型的主要优点是其简单的数据表示,易于表示复杂的查询SQL语言是最广泛使用的语言,用于创建,操纵和查询关系数据库,而关系模型是其基础。什么是关系模型?3关系示例4联系:一些实体之间的关联关系:是一种数学概念,指的是表实体集和联系集真实的世界关系-表,元组-行机器的世界Instructor:一般地,给出集合D1,D2,…,Dn,(Di=aij|j=1…k)关系r是:D1xD2x…xDn的子集,即一系列Di域的笛卡尔积因而关系是一组n元组(a1j,a2j,…,anj)的集合,其中每个aijDi例如:张清玫教授,计算机,李勇张清玫教授,计算机,刘晨刘逸教授,信息,王名关系基本结构5关系:导师-专业-学生笛卡尔积示例6例如:D1=导师集合={张清玫,刘逸},D2=专业集合={计算机,信息},D3=研究生集合={李勇,刘晨,王名}则D1XD2XD3={(张清玫,计算机,李勇),(张清玫,计算机,刘晨),(张清玫,计算机,王名),(张清玫,信息,李勇),(张清玫,信息,刘晨),(张清玫,信息,王名),(刘逸,计算机,李勇),(刘逸,计算机,刘晨),(刘逸,计算机,王名),(刘逸,信息,李勇),(刘逸,信息,刘晨),(刘逸,信息,王名)}共12个元组D1D2D3张清玫张清玫张清玫张清玫张清玫张清玫刘逸刘逸刘逸刘逸刘逸刘逸计算机计算机计算机信息信息信息计算机计算机计算机信息信息信息李勇刘晨王名李勇刘晨王名李勇刘晨王名李勇刘晨王名√√√笛卡儿积可用一张二维表表示张淸玫计算机李勇张淸玫计算机刘晨刘逸信息王名导师-专业-学生笛卡尔积示例7dept_name={Biology,Finance,History,Music}building={Watson,Painter,Packard}budget={50000,80000,90000,120000}那么,r={(Biology,Watson,90000),(Finance,Painter,120000),(History,Painter,50000),(Music,Packard,80000)}是dept_namexbuildingxbudget三者间的关系。(共48个元组)属性类型8关系的每个属性都有一个名称域:每个属性的取值集合称为属性的域属性值必须是原子的,即不可分割(1NF,第一范式)多值属性值不是原子的复合属性值不是原子的特殊值null是每一个域的成员空值给数据库访问和更新带来很多困难,因此应尽量避免使用空值我们先假设不存在空值,在后面的章节中,再讲解空值对不同操作的影响关系的概念9关系涉及两个概念:关系模式和关系实例关系模式描述关系的结构:例,Instructor-schema=(ID:string,name:string,dept_name:string,salary:int)或Instructor-schema=(ID,name,dept_name,salary)关系实例表示一个关系的特定实例,也就是所包含的一组特定的行关系、关系模式、关系实例区别:变量关系变量类型关系模式变量值关系实例关系模式10A1,A2,…,An是属性一般地:R=(A1,A2,…,An)是一个关系模式例,Instructor-schema=(ID,name,dept_name,salary)r(R)是在关系模式R上的关系例,instructor(Instrutcor-schema)=instructor(ID,name,dept_name,salary)关系实例11关系的当前值(关系实例)由表指定一个元组t代表表中的一行如果元组变量t代表一个元组,那么t[name]表示属性name的t的值attributes(orcolumns)tuples(orrows)关系的无序性12元组的顺序性是无关紧要的(元组能够以任意顺序存储),但一个关系中不能有重复的元组例,department(dep_name,building,budget)关系的无序显示码、键13使KR如果K值能够在一个关系中唯一地标志一个元组,则K是R的超码例,{instructor-ID,instructor-name}和{instructor-ID}都是instructor的超键如果K是最小超码,则K是候选码例,{instructor-ID}是instructor的候选码。因为它是一个超码,并且它的任意真子集都不能成为一个超码如果k是一个候选码,并由用户明确定义,则K是一个主键。主键通常用下划线标记外键14假设存在关系r和s:r(A,B,C),s(B,D),则在关系r上的属性B称作参照s的外码,r也称为外码依赖的参照关系,s叫做外码被参照关系例,学生(学号,姓名,性别,专业号,年龄)-参照关系专业(专业号,专业名称)-被参照关系(目标关系)其中属性专业号称为关系学生的外码instructor(ID,name,dept_name,salary)-参照关系department(dept_name,building,budget)-被参照关系选修(学号,课程号,成绩)课程(课程号,课程名,学分,先修课号)参照关系中外码的值必须在被参照关系中实际存在或为null大学数据库模式15classroom(building,room_number,capacity)department(dept_name,building,budget)course(course_id,title,dept_name,credits)instructor(ID,name,dept_name,salary)section(course_id,sec_id,semester,year,building,room_number,time_slot_id)teaches(ID,course_id,sec_id,semester,year)student(ID,name,dept_name,tot_cred)takes(ID,course_id,sec_id,semester,year,grade)advisor(s_ID,i_ID)time_slot(time_slot_id,day,start_time,end_time)prereq(course_id,prereq_id)大学数据库模式图16被参照关系参照关系查询语言17查询语言:用户用来从数据库中请求获取信息的语言“纯”查询语言:关系代数-SQL的基础元组关系演算域关系演算“纯”查询语言奠定了人们使用查询语言的基础,如SQL关系代数18在某种程度上是过程化语言六个基本运算Select选择Project投影Union并setdifference差(集合差)Cartesianproduct笛卡儿积Rename更名(重命名)用户输入一个或两个关系,并得到新的关系关系代数19附加运算Setintersection交Naturaljoin自然连接Division除Assignment赋值选择运算20例:关系r注:执行选择时,选择条件必须是针对同一元组中的相应属性值代入进行比较。选择元组,满足:A=BandD5σA=BandD5(r)选择运算21定义:p(r)={t|trandp(t)},读作sigma,其中p为选择谓词其中p是由逻辑连词(与),(或),(非)连接起来的公式。逻辑连词的运算对象可以是包含比较运算符、=、、=、=和的表达式例如:dept_name=‘Finance’(department)投影运算22例:关系r选择属性A、C投影:ΠA,C(r)投影23定义:A1,A2,…,Ak(r),读作pi,A1,…Ak是属性名,r为关系名其结果为保留此k列的值,并删除重复的行例如:building(department)buildingWatsonTaylorPainterPackard并运算24例:关系r并运算rs:并运算25定义:rs={t|trorts}rs条件:等目,同元,即他们的属性数目必须相同对任意i,r的第i个属性域和s的第i个属性域相同例如:name(instructor)name(student)差运算26例:关系r,s差运算r–s:差运算27定义:r–s={t|trandts}r-s条件:等目,同元,即他们的属性数目必须相同对任意i,r的第i个属性域和s的第i个属性域相同广义笛卡尔积28AB12AB11112222CD1010201010102010EaabbaabbCD10102010Eaabbrs例:关系r,s广义笛卡尔积rxs:广义笛卡尔积29定义:rxs={{tq}|trandqs}假设r(R)的属性和s(S)的属性没有交集如果r(R)和s(S)的属性有交集,那么必须重命名这些有交集的属性广义笛卡尔积30AB121BCkd23rsAr.B121s.BCkkk222121ddd333rxs=例:关系r,s复合运算31可以使用多种运算符构建表达式例:A=C(rxs)AB11112222CD1010201010102010EaabbaabbABCDE122102020aabAB12CD10102010Eaabbrsrxs=A=C(rxs)=更名运算32允许我们使用其他名字指代关系例:x(E),读作rho,返回表达式E的结果,并把名字X赋给了它。假设关系代数表达式E是n元的,则表达式x(A1,A2,…,An)(E)(对关系E及其属性都重命名)返回表达式E的结果,并赋给它名字X,同时将属性重命名为A1,A2,…,An.银行示例33branch(branch-name,branch-city,assets)customer(customer-name,customer-street,customer-city)account(account-number,branch-name,balance)loan(loan-number,branch-name,amount)depositor(customer-name,account-number)borrower(customer-name,loan-number)查询示例34例1:找出贷款额大于$1200的元组amount1200(loan)例2:找出贷款大于$1200的贷款号loan-number(amount1200(loan))loan(loan-number,branch-name,amount)查询示例35例3:找出有贷款或有帐户或两者兼有的所有客户姓名customer-name(borrower)customer-name(depositor)例4:找出至少有一个贷款及一个账户的客户姓名customer-name(borrower)customer-name(depositor)depositor(customer-name,account-number)borrower(customer-name,loan-number)查询示例36例5:找出在Perryridge分支机构有贷款的顾客姓名查询1:customer-name(branch-name=“Perryridge”(borrower.loan-number=loan.loan-number(borrowerxloa
本文标题:数据库第二章
链接地址:https://www.777doc.com/doc-3990074 .html