继承、引用类型
被考次数: 1次
被考频率: 低频率
答错率:    48%
知识难度:
考试要求: 了解     
知识路径:  > 数据库主流应用技术  > 数据库主流应用技术  > 数据库主流应用技术  > 面向对象数据库  > 对象关系数据库系统


本知识点历年真题试卷分布
>> 试题列表    
 

 
       在这里的介绍是基于SQL:1999标准的,不过也会提到一些在这个标准中没有出现的,但是在SQL标准的未来版本中会介绍到的一些特征。
       继承可以在类型的级别上进行,也可以在表的级别上进行。首先考虑类型的继承。
       假定我们有如下的人的类型定义:
       
       如果要在数据库中对那些是学生或教师的人分别存储一些额外的信息,由于学生和教师都是人,因而可以使用类型继承来定义学生和教师类型如下:
       
       Student和Teacher都继承了Person的属性,即name和address。Student和Teacher都被称为Person的子类型,Person是Student的父类型,同时也是Teacher的父类型。
       现在假定要存储关于助教的信息,这些助教既是学生又是教师,甚至可能是在不同的系里。如果类型系统支持多重继承,可以为助教定义一个类型如下:
       
       TeacherAssistant将继承Student和Teacher的所有属性,但是却有一个问题,因为name、address和department同时存在于Student和Teacher中。
       name和address属性实际上是从同一个来源即Person继承来的,因此同时从Student和Teacher中都继承这两个属性不会引起冲突。然而department属性在Student和Teacher中分别都有定义,事实上,一个助教可能是某个系的学生同时又是另一个系的教师。为了避免两次出现的department之间的冲突,可以使用as子句将它们重新命名,如对TeacherAssistant类型定义如下:
       
       在SQL:1999中只支持单继承,即一个类型只能继承一种类型,使用的语法如同前面提到的例子。TeacherAssistant例子中的多重继承在SQL:1999中是不支持的。
       我们通过下面的例子来说明表继承。
       假设定义people表如下:
       
       那么再定义表students和teachers作为people的子表,如下:
       
       子表的类型必须是父表类型的子类型,因此people中的每一个属性均出现在子表中。
       当我们声明students和teachers作为people的子表时,每一个students和teachers中出现的元组也隐式存在于people中。所以,如果一个查询用到people表,它将查找的不仅仅是直接插入到这个表中的元组,而且还包含插入到它的子表students和teachers中的元组。然而,只有出现在people中的属性才可以被访问。
       面向对象的程序设计语言提供了应用对象的能力,类型的一个属性可以是对一个指定类型的对象的引用。我们可以定义一个Department类型,它有一个name字段和一个引用到Person类型的head字段,然后定义一个Department类型的表departments,如下所示:
       
       在上面的定义中,使用关键词scope来限定了引用范围。这里,引用限制在people表中的元组。
 

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

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