图灵奖得主的得奖论文 大型的共享数据银行的数据的一个关系模型 第3部分

1.4  规范化的形式
一个关系它的域都是简单域,在存储方面,它能被表示为一个二维的
如上讨论的类型的与列同质的数组。对于有一个或者是多个非简单域的关系,一些更加复杂的数据结构是必要的。为了这个原因(如下所列的其它原因)消除非简单域的可能性值得研究一下,事实上有一个非常简单的消除非简单域的程序,我们叫它规范化。

考虑一下,例如,在图3A中展示的关系的集合。“工作历史”和“孩子”是关系 “员工”的非简单域。“工资历史”是关系“工作历史”的一个非简单域。在图3A中的树显示了这些非简单域的内部关系。

                           员工
                            |
——————————————————
|                                                         |
工作历史                                              孩子
   |
工资历史

员工(人,姓名,生日,工作历史,孩子)
工作历史(工作日期,标题,工资历史)
工资历史(工资日期,工资)
孩子(孩子姓名,出生年份)

图3A  未规范化的集合

员工(人,姓名,生日)
工作历史(人,工作日期,标题)
工资历史(人,工作日期,工资日期,工资)
孩子(人,孩子姓名,出生年份)

图3B 规范化的集合

规范化执行如下:开始于树的顶点的关系,把这个主键扩展到它的直接的子级关系中的每一个,以把这个主键的域或者是域的组合插入到子级关系中。每个被扩展的子关系的主键由父级关系复制下来。这样的子关系是由被父级关系的主键扩展之前的主键组成的。现在,从父级关系移除所有的非简单的域,移除树的顶级结点,并且对剩下的每一个子树重复相同的操作序列。

图3A中的关系的规范化的集合的结果是图3B中的集合。每个关系的主键被加井号,来显示出这个键是如何被规范化操作扩展的。

如果如上的规范化是可行的,关系的非规范化的集合必须满足如下的条件: 1 非简单域的内部关系的图是一个树形的集合。
2 组成每个主键的域都是简单的域。

作者知道没有应用要求对这些条件进行任何的放宽限制。一个规范化类型的进一步的操作是可行的。在这篇文章中不再讨论这些操作。

在当所有的关系都被做成规范化的形式时,变得有灵活性的数组表示的简单性,不仅是存储目的上的优势,而且是在广泛地使用不同的数据表示的系统之间进行大块的数据的通信的优势。通信形式将成为数组表示形式的一个合适的压缩的版本,并且有如下的优势:
1它没有指针
2它避免了所有的哈希地址模式的依赖
3它没有包含索引和索引列表

如果用户的关系模型被设置为规范化的形式,在数据银行中的数据的项的名称能有一个更简单的形式。一个通用的名称有这样的形式:
R(g).r.d  
R是一个关系的名称,g是一个通用的标识符(可选项);r是一个角色名称(可选项);d是一个域的名称。因为g仅当一个给定的关系存在多级的下级关系时才需要,r仅当一个关系有两个或者是多个域同时命名为d时才需要,所以简单的形式 R.d将就是足够的了。

1.5 一些语言学的方面
如上描述的数据的关系模型的采用,允许一个通用化的数据的子语言的开发,这个语言基于一个应用的谓词演算。如果关系的集合是规范化的形式的话,一阶谓词演算是足够的。这样的语言将为所有的其它的被推荐的数据语言提供一个语言学的威力的尺度,并且它本身将成为了一个嵌入于一些主机语言的强有力的候选者。作为嵌入式需要一些合适的语法上的修改。主机语言包括编程式的,命令式的,还有问题导向的。在细节上详细地描述这样的语言,不是本文的目的,它的重要的特征如下:

让我们以R来表示数据子语言,以H表示主机语言。R允许关系和它们的域的声明。一个关系每个声明都标识着那个关系的主键。声明的关系被加入到系统的目录中,能够让有合适的授权的社区中的任何成员来使用。H允许支持显示的声明可能有更少的永久性,这些关系如何在存储中被表示出来。 R允许为从数据银行中的数据的任何子集的检索而做出规范。这样的一个检索请求的动作是安全限制的一个主题。

数据子语言的通用性有赖于它的描述能力(不是它的计算能力)。在一个大型的数据银行中,数据的每一个子集,都有一个很大量的可能性(和合乎情理的)的描述,甚至当我们假定(正如我们所做的)仅有一个功能性的子程序的很有限的集合。 这个子程序集合是系统能够存取的,为了检索的量化数据而使用的集合。因此,被使用在一个集合规范上的量化表达式的等级必须有一个应用级的谓词演算的符合形式的公式的等级的描述性的威力。 为了保留这种描述能力,它是有名的,它没有必要表示出被选择的谓词演算中的每一个公式。例如,仅仅在前束范式中的那些就足够了。

在检索语句的量化与其它部分中算术的函数是可能被需要的。这样的函数能被H定义,并且在R中进行调用。

仅为了查询的目的一个集合可能被读取,或者为了可能的修改,它可能被保留。插入表现为添加新元素到声明的关系中的形式,它无关于它们的机器表示中存在的任何的顺序。对于社区(不同于个人与子社区)而言,有效的删除表现为从声明的关系中移除元素的形式。如果删除与更新依赖于在R中被声明的特定的关系们之间,一些删除和更新可能被其它的删除与更新触发。

一个重要的效应是面向数据的视图在语言上已经使用了以数据元素和集合的名称来检索。在这方面之前的部分已经讨论过了。以通常的网络视角,用户将常常因为使用了比绝对必要更多的关系名称而感到有负担,因为名称被关联到路径(或者是路径类型)而不是关系。

一旦一个用户注意到一个特定的关系被存储了,他将期望能够以它的参数作为已知的和其它的参数作为未知的,使用这些参数的任何组合来使用这个关系,因为信息是在那里(就像世界最高峰在那里一样)。这是一个系统的特征(是许多的现有的信息系统所缺失的)我们叫它为(逻辑上的)关系的对称性的可开发性。自然的是,在性能方面,对称性是不被期待的。

为了支持一个单独的二元的关系的对称性的利用,两个有方向的路径被需要。对于一个度为N的关系,要被命名和控制的路径的数量是N的阶乘个。

回过头看,如果一个关系的视图被使用在每一个N(N>2)元的关系中,这个视图将不得不被用户表示为一个嵌套的表达式,这表达式仅包含二元关系(例如 参见LEAP系统),然后2*N-1个名称不得不被使用代替N+1个直接的N元组的在1.2部分中描述的标识。例如,图1中的4元的关系“供应”,在一个N元的标识法中,它牵涉到5个名称,能被表示成如下的形式:
P (供应商,Q(部分  ,R (项目,数量)))
在嵌套的二元标识法中,它使用了七个名称。

这种类型的表达式的一个进一步的劣势是它的非对称性。尽管这种非对称 性没有阻止对称性的使用,它使询问有了一些基础,对于用户的表达是非常麻烦的(例如考虑一下,对于给定项目的相关的部分和数量的查询,使用Q和R)。

1.6 表达式,命名,和存储的关系
与数据银行相关的关系的两个集合:一个命名的集合和可表达的集合。命名集合是用户能使用简单的名称(或者是标识符)标识的社区中的所有的关系的集合。当一个合适的有授权的用户声明了R,一个关系R就得到了在命名的集合中的一个成员;当一个合适的有授权的用户取消了R的声明时,R就失去了命名的集合中的成员了。

可表达的集合是在数据语言中的表达式能够指定的关系的所有的集合。从命名的集合中的关系的简单名称中,代,角色和域的名称,逻辑连接,还有谓词演算的符号和特定的常数的关系符号 例如等号,大于号等,而组装的表达式。命名集合是可表达的集合的一个子集,通常是一个非常小的子集。

因为在命名集合中的一些关系可能是集合中的其它的关系的的时间独立的组合,所以考虑把命名集合与定义这些时间独立的约束的语句的一个集合进行关联是有用的。在我们介绍了一些操作和关系之后,我们将延续进一步的讨论(见第二部分)。

一个数据系统的设计者面对的一个主要的问题是为了它的用户支持一个关系模型,要确定被支持的存储表示的等级。理想的是,各种被允许的数据表示应该足够覆盖安装的所有的集合的性能需求的光谱。太多导致了在存储上没有必要和为当前有效的结构的描述的持续性的重新解释。

对于数据系统中存储表示的任何已选的等级必须提供一个方法,这个方法能够把用户的在关系模型的数据语言中表达的请求翻译成 当前的存储表示中的相对应的有效的动作。对于一个高级的数据语言,这存在一个有挑战性的设计问题。然而,它是一个必须被解决的问题,随着越来越多的用户并发性地读取一个大型的数据银行,提供有效的响应和吞吐量的责任从单独的用户转移到了数据系统。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值