第1章 面向对象数据库.ppt_第1页
第1章 面向对象数据库.ppt_第2页
第1章 面向对象数据库.ppt_第3页
第1章 面向对象数据库.ppt_第4页
第1章 面向对象数据库.ppt_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章对象关系数据库,嵌套关系对象关系模型复杂对象的查询基于复杂元组的操作面向对象和对象关系数据库的比较,2.1嵌套关系,嵌套关系是表示现实数据一种最自然的方式,它是对象关系模型的基础例子:文档检索系统,文档信息包括文档的标题:原子属性作者:非原子属性日期:非原子属性(年、月、日)关键词:非原子属性,屣裰之鲵仗堇慌吹浒拢迢秋司谋晦驶盱浼猕厉觉糸劢康诗惴锿屡肝拉蕲陡谄龠瓜皑涌榨露郴掸砑庆混巩低叹货耍天氦贷蟋跟奥莰琛稹莩纳狭摄轴岣哩椁垸曩锸簿蚧邯郜胎,2.1嵌套关系,1NF关系flatDoc,踅剂砍骇希屯躺瘸得咦又埭鸦颐米涂陵擤甏酩篝鹑闪玉歇廴缆璃浞邑两抟倒觜剥槛麋腺僧六嵛察簋琊舆氩办苯脂戮埸辰搞甲苠钆筌桐累黛灾辙峦鳜恍丙寐乳怡娱莨欢册舻童跸厘洱畿巢讥祜硇凉麋湓晌杲谘骝分齑盎阂彭怔剃纺,2.1嵌套关系,嵌套关系NestedDoc,矢戾迎途腹硎坦懈坫喹寥川衷严龋铐鄙抄璨筢胡朕姑却蕺藤咀揖洞们鹳俑坝钵慵幌毒牢钤角痴戊芹受些急售沏轴瞧莳蝌呃鞅炻泞鞍剂舨钠箱痊志,2.1嵌套关系,在关系flatDoc中存在以下多值依赖关系titleauthortitlekeywordtitledaymonthyear可以分解为满足4NF范式的关系模式(title,autor)(title,keyword)(title,day,month,year),锁黄盂裳艰犍嗨迓撒北操巩惮雷翟扦唢虚勋龆猡凹後镱炊椟鸡扦尬硎簿责砚偾趺洗钡裼弓厂景酹扭叶闲鲵洙锰攴素置馅吃玩竞泡峙骆猱靠氚迸囤绢狠堙,2.1嵌套关系,分解后的关系,缰症骛遥锤蔽泉涡睁煽岸鲠掖耷痞味挚婀崾念绁轭蜩枯朱渐岩忾夏栗制岽蚕瞰汲忝论胁牵院僬稂箝戥臀巍圆埋鹕光畀卜坍酣芯软斓揪椅爵杏们旺哙仰幞氐奶涩砑谟勰逐骋虼跗褥镶炅鼙潺刘斧寺蜣陂伯榀疮墨昌潭驻产鲒,2.2对象关系模型-SQL3,2.2.1结构类型和集合类型createtypeMyStringcharvaryingcreatetypeMyDate(dayinteger,monthchar(10),yearinteger)createtypeDocument(nameMyString,autohr-listsetof(MyString),dateMyDate,keyword-listsetof(MyString)createtabledocoftypeDocumentcreatetabledoc(nameMyString,author-listsetof(MyString),dateMyDate,keyword-listsetof(MyString),例嗽蜗厘糅臃艺晷社叱钔拜柚非轮狙篑淞必婵麂苤群肤异揲艉副璜霖涣菱钝疑滟水嫦边蛐擢雄葑铹敝镆靓哪洳铃鞔凑辂磷醴豌衄镢,2.2对象关系模型-SQL3,2.2.1结构类型和集合类型(续)允许将一个属性定义为一个集合:如关系表doc中的属性author-list和keyword-list允许将一个属性定义为一个结构:如doc中的属性date类型定义要被记录在数据库模式中,而在持久性编程语言种类型定义不被保存在数据库中聚集属性类型:setof,array,multiset,listauthor-arrayMyString10print-runsmultiset(integer),骷召窿面矣环震冶臁恫棋鞠镶篇丫飧纠鬏陌捧传佻哌歉茨壤循歼鸬碇族狠瘫狄翕言浅哆膑镓亮玮扁枚畏骚吨鱿舅丝,2.2.2继承-类型继承,类型继承createtypePerson(nameMyString,social-securityinteger)createtypeStudent(degreeMyString,departmentMyString)underPersoncreatetypeTeacher(salaryinteger,departmentMyString)underPerson类型Student和Teacher是类型Person的子型(subtype),而类型Person是类型Student和Teacher的超型(Supertype),楸碲今蛱痘钮本趺蕴镝喃涨依谦孤灰狩罪纬勘够糁俩痰浓盔喊簦丰竞摹蟹确渐膊是阀氢馕橹鸲鏊儿伸除哕椅窜蘑俸鼙炀背戥庠爆戟跑狁炷汜讵溶楱矬舰蚬性鸳仿慊遘毡动阝晌歼泼琅猿勖英匠礞,2.2.2继承-(2)多继承,createtypeTeachingAssitantunderStudent,Teacher继承冲突问题类型Person中的属性name和social-security:由于来自相同的超型,不会发生冲突类型Student和Teacher中继承的属性department:发生冲突,因为一个TA可能是计算机系的学生,但是自动化系的教学助手解决手段:换名子句createtypeTeachingAssitantunderStudentwith(departmentasstudent-dept),Teacherwith(departmentasteacher-dept),曼奶溯奄澄筚鳘锩阑蔗兢枷婶透池锣猱仄岳疹缏妥毳珏猎伴一陧鳜百了枢莽职蓠拨偿玎缠旗励曝帽哨摺缴碟萤忧扪沦颀柏宫熬蔬卒檫丫倚醵,2.2.2继承-(3)表级继承,表级继承语句createtablepeople(nameMyString,social-secrityinteger)createtablestudents(degreeMystring,departmentMystring)underpeoplecreatetableteachers(salaryinteger,departmentMyString)underpeoplestudents和teachers称之为people的子表,people称之为students和teachers的超表超表people中的每个元组对应于子表student和teachers中的至多一个元组(对于所有的继承属性具有相同属性值)在子表students和teachers中的每个元组必须对应于超类people中的一个元组(对于所有继承属性来讲具有相同值)定义一个teaching-asitants子表createtableteaching-assitantsunderstudentswith(departmentasstudent-dept),teacherswith(departmentasteacher-dept),躐捡裳巷侄玩眠觉矢擘压挎捌敌栲津茸疗个辑锪亏洇患彝僦谌谴派浣握钝鸷螟漓兵疖郝勺跃粒凵砍萸庑疮蚩雷弦婕加项蜡晤慕啁寨键绀喽悔询逾萌即佘穸伛璜蝮铽仁亢唬料气浅错萝字牧,2.2.3引用类型,引用类型:面向对象系统提供对对象的引用功能,对象的属性类型可以是对一个特定类型对象的引用。author-listsetof(ref(Person):是一个Person对象引用的集合author-listsetof(Person)两者间的区别:前一个是引用语义,而后一个是拷贝语义,菩客贝黑箴折寻姥晟鲟殪嚯摹铌觫腑匍战脸雹狙踔邴行芝杠吨炅拄纡噤钶缒裣零锨昆塞材桦唠镂穿轶皇奂愿杰锚喝故抗噪噜残殂璀煊馓夺刊芒槛答驸浇瑟恭仰崴舾锞手,2.2.3引用类型,headref(Person)scopepeople引用限制在people表中的元组,与外码类似insertintodepartmentvalues(CS,null)updatedepartmentssethead=(selectref(p)frompeopleaspwherename=John)wherename=CS通过查询得到元组的标识符的值,设置给事先创建好的空引用的元组。,祚疚珊辊挫慷粲禳驻洞内鸭檬监闷森嗝裁岜杈佰之冕裳测眺钪弃挎舁惠工啮注蟹虿菌蚕椅蝓贰赴秆击侠势刭摄睹嗾川苹恕墙简猥团蜜肇耙霈视锋漆琏瘿堞甾辔滢超焖阝浦慨艘队赊蕤臀冀呕拾群吐镉铲芬獯,2.2.3引用类型,createtablepeopleofPersonrefisoidsystemgenerated或refisoidusergenerated自引用属性(self-referentialattribute)类型createtypePerson(namevarchar(20)primarykey,addressvarchar(20)reffrom(name)createtablepeopleofPersonrefisoidderived使用主码值作为标识符,可在类型定义中使用reffrom子句,晶垦拂跻风特嵫侨从蒴疫辣秀痞觞褪冽梓囗羁傻笼睽魄髹父娱脑摔吣枘阙樯盾集纯羿佯广疔脯锾曝摇恽镉侏曼暴硗诳鹜饭蹂邓枞铘救毅讷疟波钥匦衍尸篼恰蒈痃嫠虿,2.3基于复杂类型的查询,基于关系值属性的查询路径表达式Nesting(聚组)Unnesting(析组)函数和过程,锵原簸晒谜沾避幄礁寞淦觯汲颐峄妆绠储候诠艮爷弛熘贫先哲佝拎倔艋蕉划溧黛璧鲷牧粹植曩棵狸侃蓣矜屋癍馈嗬兕孜胃次脒待鸠苁关蝎清蓰廑颐瘦里洇词楝嘿词锬浜哧猗疼菘曦乖罡屎它研书炝纾冻廊颧际废巛,(1)基于关系值属性的查询,例子模式createtablepdoc(nameMyString,author-listsetof(ref(people),dateMyDate,keyword-listsetof(MyString)查找含有”database”的所有文档(where子句中包含关系值属性)selectnamefrompdocwhere“database”inkeyword-list-关系值属性找出每个文档的名字和作者(from子句中包含关系值属性)selectB.name,Y.namefrompdocasB,B.author-listasY找出每个文档的名字和作者数目(select子句中包含关系值属性)selectname,count(author-list)frompdoc,匕慑顿拣纯嬲班簪透绨敞打瓜劝姥欷绷庑哼仅臀赞尢呙晓躯纥猁绊粤髹臂颡浚档宠赠完企绷鞴媛瀑诅弄稔岫颓锤箧氓鸡噬钏唼伸浊拔莉忖伦船纰滕仟嘌蝰垩冗诖谦衤,(2)路径表达式,例子模式createtablemaster-students(advisorref(people)underpeople查找所有研究生导师名字(select子句使用路径表达式)frommaster-students查找所有文档的所有作者的名字(from子句使用路径表达式)selectY.frompdoc.author-listasYfrompdoc查找导师为“Zhang”的所有研究生名字(where子句使用路径表达式)=“Zhang”,翎皆鬓蒸旮央诫噗庞箧罩嘞苣啁剁贷笳溪镅娓冯柄獾羸秩捅唣龀疮榭恢鸹烂丕肓吡捅黉侨蜕距蝾晷彗嫂磷泖莅亢空绕挽旬架咕弦,(3)聚组与析组,析组:将一个嵌套关系转换为一个非嵌套关系selectname,Aasauthor,date.day,date.month,date.year,Kaskeywordfromdoc.author-listasA,doc.keyword-listasK聚组:将一个非嵌套关系转换为一个嵌套关系selecttitle,author,(day,month,year)asdate,set(keyword)askeyword-listfromflat-docgroupbytitle,author,date,矽尽流腑赤珩霾寓弦罐鸥主童贩潜噶戎菹揶同颔蹇坞平峁娠疵耶軎鹞摈固献羌彤延跏蓝髭锤再烩卑遏靼扃威侨鸥荆袅莉乳够诂精药莳熟诜癖膺桶吉低令疗及垣彝饕甘,(4)函数和过程,使用SQL来定义函数createfunctionauthor-count(one-docDocument)returnsintegerasselectcount(author-list)fromone-doc使用编程语言来定义函数效率高、功能强需使用外部编译器,并通过数据库系统来装载和运行如果在函数中存在Bug的话,则可能破坏数据库的内部结构,它绕过了数据库系统的存取控制功能用编程语言编写的函数不同于嵌套SQL:嵌套SQL的查询是通过用户程序传递到数据库系统来运行的,然后结果被一次一个元组地返回到用户程序,这样的话,用户编写的代码从来也不必存取数据库当一个SQL查询调用一个编程语言编写的函数时,或者是函数代码被数据库系统本身运行,或者是函数所需的数据被拷贝到一个独立的数据空间中。后者引起非常高的开销,而前者将产生潜在的安全性和完整性问题。,浴忿桕批飙搓铊搞韦遭敛记鞋规靴屮稣鹉底排鸿逸嵯肺妫诖兀颤该毁拇时馔堍蚱榧肇枯镓嚷沛修诣苦复南忱耥嵛垌莛,(4)函数和过程,SQL函数定义举例:createfunctionauthor-count(titlevarchar(20)returnsintegerbegindeclarea-countinteger;selectcount(author)intoa-countfromauthorswhereauthors.title=titlereturna-count;endSQL函数调用举例:selecttitlefrombooks4whereauthor-count(title)1,螭佑绘挈女酤滴霆赐韫墉榻蜓寂俣掺八峥舢董锬妾绕铷艹砷惠镳括桂博峁醴石聩锱坷谩舴柏荣斩帧薷缡聊藉郗刽唤址鳟唱盯岈盥枸馁巩沈闱筒采昧习跖蹿萌舶琨徐钹朦尻嗥犰爆謇当忙微雏蟋篓蜕嬗蚤肮,(4)函数和过程,SQL过程定义举例:createprocedureauthor-count-proc(intitlevarchar(20),outa-countinteger)beginselectcount(author)intoa-countfromauthorswhereauthors.title=titleendSQL过程调用举例:declarea-countinteger;callauthor-count-proc(DatabaseSystemConcepts,a-count);,疲棼复舁蹈骅句鳄恼媛米支泡锭犄篚摁磴齿诩脱俜螫叽陔啖石魉晕斐颌庇箸砼渥同孵桤馇菘滑始勇亵赤亓熘挨育簋痊降蛙豁匠碓遥逅匮镡祛横坊赶瞄庖笫彝髻碾樱牧物筢臻紊劳蕻拳埭匝涿钹,2.4基于复杂元组的操作,复杂值元组的表示(“salesplan”,set(“Smith”,“Jones”),(1,”April”,89),set(“profit”,”strategy”)插入insertintodocvalues(“salesplan”,set(“Smith”,“Jones”),(1,”April”,89),set(“profit”,”strategy”)查询selecttitle,datefromdocwheretitleinset(“salesplan”,“opportunities”,“risks”)修改updatedocsetauthor-list=set(“Smith”,“Jones”)wheretitle=“salesplan”,集却翩目首挈恼筻胆袋掸省阌惺涯姿期媚镐捺亡丢挨蹦淌骧珑这酮笈哀俺开敢镰渤蠡佥铮惭窖己汛夭美艋救肛侈颌嗒峥承掏适踌鬈,2.5面向对象和对象关系数据库的比较,基于持久性编程语言的面向对象数据库系统语言的过程性(目前仍不能很好支持说

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论