时间:2022-12-20 22:30:01 | 来源:信息时代
时间:2022-12-20 22:30:01 来源:信息时代
泛关系 : 用户观念上的数据库中的一种特殊关系。在数据库设计时,为了使函数依赖模式不存在弊病,需要对不属于范式的函数依赖模式进行分解,然而分解就会使函数依赖模式的数目增加,函数依赖模式越多,用户使用就越不方便。在存储时按分解后的函数依赖模式存储,在使用时让用户仍把数据库中所有属性的集合想象成是一个整体的关系模式,所有函数依赖都认为是这个关系模式上的函数依赖,所有数据都理解成是这个关系模式上的单一关系中的数据。用户的所有操作也都理解成是对这个单一关系的,这个想象中的单一关系就称为“泛关系”。
“泛关系”的研究是在1976年Bernstein提出泛属性集的观点后开始的。早期的研究工作因为受了泛关系上的元组也不允许有空值这样一个默认的假设的束缚,所以进展并不大。1980年,Honeyman、Lander及Yannakakis开始研究了含空值的泛关系的理论,提出了全投影、泛例、有效模式、元组的淹没、关系的淹没、代表泛例等全新概念,使“泛关系”的研究有了新起色,出现了许多新成果。后来,为了对泛关系进行查询,人们还提出了窗口函数的思想。1982年,Fagin、Mendelzon及Ullman等提出了一种语义结构窗口,这种窗口很适合于查询语义的表达。1983年,Sagiv定义了键依赖,扩展连接及唯一性模式的新概念,并用唯一性模式作为查询的一种窗口。1986年,Maeir等推广了这个结果,允许不是键依赖的函数依赖集形成窗口。
由于泛关系是一种用户观念上想像的数据库,所以它的可用性在历史上曾受到置疑。Kent(1981年)、Atzeni(1982年初)及Parker(1982年初)都发表文章认为泛关系作为一种数据模型是不合适的。1982年10月,Ullman则著文给以反驳。1983年,Kent又两次提出对泛关系的反对意见。同年Ullman又给予反驳。有趣的是关系数据库理论的创始人Codd竟然也反对泛关系的思想,1988年他发表文章支持早期对泛关系的那些反对意见。特别还举例说明泛关系领域中无法处理的以下查询: 关系模式R={雇员,城市,仓库},基本语义单位S1={雇员,城市}表示雇员所居住的城市,基本语义单位S2={城市,仓库}表示仓库所在的城市(基本语义单位请见本条目后面的说明)。查:其居住地有一个仓库或多个仓库的雇员。但在同年,Vardi等就给予了反驳,他们给出了基于唯一性模式窗口及语义结构窗口的对这个查询的查询解释。总体来看,现在大多数人还都是认为泛关系理论是适宜的。
泛关系的谓词定义如下:设U是数据库中全部属性的集合,Ω={R,…,Rn}是U上的一个数据库模式(数据库模式请参看关系数据库条目)。Si={Ai1,…,Ait}U, 〈xi1, …,xit〉是Si上的变量元组,Pi是以xi1,…,xit为变量的谓词,简称Si上的谓词,记号Pi(Si)表示相应的谓词公式。u是对xi1,…,xit的一个赋值。若u(xi1),…,u(xit)能使
Pi为真,则称u使Pi(Si)为真。如果这里的每个Pi都不能再分成两个谓词的合取,而且每个Si都是某个Rj的子集,而〈xi1,…,xit〉是整个U上的变量元组,且u使P1(S1)∧…∧Pk(Sk)为真,则称〈u(x1),…,u(xn)〉为U上的由谓词公式集合P1(S1),…,Pk(Sk)决定的一个元组,并称集合{〈u(x1),…,u(xn)〉|u使P1(S1)∧…∧Pk(Sk)为真}为U上由谓词公式集合P1(S1),…,Pk(Sk)决定的泛关系。每个Si都称为基本语义单位,并称Γ={S1,…,Sk}为U上的语义结构。
若r是U上的一个泛关系,r中允许有空值。XU, 则r在X上的全投影, 记作r[[X]], 是集合{u[X]|u∈r,u在X上没有空值}。例如U={A,B,C,D},U上的泛关系r如表1所示。则r[[AB]]={〈a,b〉}, r[[AC]]={〈a, c〉,〈e,f〉}, r[[BD]]=∅。
表1 一个含空值的泛关系(其中丄表示空值)
A | B | C | D |
a | b | c | ⊥1 |
e | ⊥2 | f | ⊥3 |