嵌套与解除嵌套
考试要求: 掌握     
知识路径:  > 数据库技术  > 数据库标准语言—SQL  > SQL-99所支持的对象关系模型  > 与复杂类型有关的查询


 
       将一个嵌套关系转换成具有更少(或没有)的关系为值的属性的形式的过程称为解除嵌套(unnesting)。books关系有author-array和keyword-set两个是集合体的属性;同时books关系另外还有title和publisher两个不是集合体的属性。
       
       flat-books的一个1NF实例
       from子句中的变量B被声明为以books为取值范围,变量A被声明为以书B的author-array中的作者为取值范围,同时K被声明为以书B的keyword-set中的关键字为取值范围。上图显示了books关系的一个1NF实例,下图显示了上述查询的结果形成的4NF关系。
       
       分解关系flat-books为4NF的实例
       将一个1NF关系转化为嵌套关系的反向过程称为嵌套(nesting)。嵌套可以用在SQL中的分组操作的一个扩展来完成。在SQL中分组的常规使用中,要对每个组(逻辑上)创建一个临时的多重集合关系,然后在这个临时关系上应用一个聚集函数。我们可以通过返回这个多重集合而不应用聚集函数的方式创建一个嵌套关系。
       
       flat-books的一个1NF实例
       假定我们有一个如上图所示的1NF关系flat-books,下面的查询在属性keyword上对关系进行了嵌套:
       
       
       flat-books的一个1NF实例
       在上图中flat-books关系上执行这个查询的结果如下图所示。
       
       flat-books关系的一个部分嵌套版本
       
       非INF的书籍关系,books
       如果我们要同时对作者属性进行嵌套,而将下图中1NF表flat-books转化为上图所示的嵌套表books,我们可以使用如下查询:
       
       flat-books的一个1NF实例
       
       另一种创建嵌套关系的方法是在select语句中使用子查询。下面的查询阐明了该方法,它与上面的查询执行了同样的任务。
       
       系统对select子句中对外部查询中的from和where子句生成的每一个元组执行嵌套子查询。观察到外部查询中的O.title属性被用到嵌套查询中,以确保对每一本书的题目产生正确的作者和关键字集合。这种方法的优点在于可以在嵌套查询上使用orderby子句生成一个有序的结果。数组或是列表可以从嵌套查询的结果中构造出来。如果没有排序,数组和列表将不能唯一确定。
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有