第五章 关系型的局限性.ppt
文本预览下载声明
第五章 关系模型的局限性 一个代表性的多面体的关系描述 关系模型的缺点 阻抗失配带来的问题 用边界表示法描述的多面体E-R设计 多面体的关系模型示例 多面体的关系模型示例(续) 关系模型的缺陷 1 对象被分割,将一个用户看到的完整性对象被分割为若干个关系,使对象中内部结构不是1:1映射 例:查询体积大于10的所有多边形及其顶点坐标(x,y,z) 关系模型的缺陷 1 续 Select distinct p.PolyID, v.VertexID,v.X,v.Y,v.Z From Polyeder p, Hull h, Boundaries b, StartEnd s Vertices v Where p.Volume 10 and p.PolyID = h.PolyID and p.FaceID = b.FaceID and b.EdgeID = s.EdgeID and s.VertexID = v.VertexID 关系模型的缺陷 2 主关键字属性唯一性维护的困难 由于对象的分割,使用户需要定义和维护连接多个关系的外键的唯一性。在多用户环境下,这种维护是困难的。 维护关键字属性引用完整性的困难。 引用完整性——保证一个外部关键字引用的元组是真是存在的。而由于对象的分割存储,以及RDBMS不能保证相关联的关系之间插入元组的完整性。因此这个引用完整性是难以保证的。 关系模型缺陷 3 对数据抽象缺乏支持 关系模型只支持简单的结构化很强的应用。对具有复杂结构和复杂语义的应用缺乏支持。 ——不支持聚合抽象 ——不支持泛化/特化抽象 ——不支持抽象数据类型ADT 关系模型的缺陷 4 缺乏对对象行为控制的支持。 ——应用领域中一个完整的对象应具有两个方面的描述 1. 结构表示 2. 行为的具体描述 二者的互相捆绑保证了对象状态变化的正确性,而关系模型缺乏对行为描述的支持。 编程语言阻抗失配带来的问题 说明性SQL语言与过程性的编程语言的阻抗失配 面向集合的数据操作与面向记录的数据操作失配 目前解决方法:用游标的方法顺序提取 存在问题: 对复杂应用而言,随机访问需求与单行的顺序访问约束之间的失配。 建立在连接(Join)查询上的查询结果是不可更新的,这对被切割的复杂对象的更新带来很大困难。 例 指针Edge Vertices指向的Join查询结果是不能直接被更新的 Exec sql declare Edge Vertices cursor for select s.EdgeID,v.VertexID,v.X,v.Y,v.Z from StartEnd s,Vertices v where s.VertexID=v.VertexID; exec sql declare EdgeToVertices cursor for select * from StartEnd; exec sql open EdgeToVertices ; while(1) /*Iterate over the EdgeToVertices crusor*/ { exec sql fetch EdgeToVertex into:E#, :V#; exec sql select X,Y,Z /*read the coordinates*/ into :Xvar, :Yvar, :Zvar from Vertices where s.VertexID= :V#; …… exec sql update Vertices set…; /*perform modifications*/ } 例:阻抗失配可视化 * Polyeder N Hull M PolyID Faces N Boundaries M FaceID Edges N StartEnd M EdgeID Vertices VertexID … … … … 1000.00 … … “cubo#5” … … Volume PolyID Polyeder … … … … … … … 40.00 40.00 … 40.00 … … “f1” “f2” … “f6” … … Circumference FaceID Faces “f1” “f2” … “f6” … “cubo#5” “cubo#5” … “cubo#5” … FaceID PolyID Hull … “e1” “e2” “e3” “e4” … … … … “f1” “f1” “f1” “f1”
显示全部