知识卡片
互换性原理及其重要推论
内容
互换性原理:基关系变量和虚拟关系变量(视图)之间不应存在任意的、不必要的
区分——对用户而言,视图应该”感觉上”如同基关系变量一样。书中用一个具体反转
来证明这条原理的必要性:常见设计里S是基关系变量、LS(London供应商)和NLS
(非London供应商)是从S派生的视图;但完全可以反过来,让LS、NLS成为基关系
变量、让S定义成LS UNION NLS这个视图——两种设计在逻辑上不同但信息等价
(表示相同信息、支持逻辑等价的查询),”某个关系变量到底该设计成基关系变量
还是视图”从形式化角度看本质上是随意的选择,这正是互换性原理成立的直接证据。
这条原理带来一系列具体推论:视图必须和基关系变量一样服从完整性约束(约束
不是基关系变量的专利);视图应该能有键、也能有外键,外键也应该可以参照视图
(Tutorial D支持这类声明,SQL不支持);[[实体完整性与参照完整性及NULL的本质]]
里的实体完整性规则只专门适用于基关系变量、不适用于视图,这本身就违反了互换
性原理(作者认为这进一步印证了他反对该规则本身的立场);如果行ID(row ID)
这类特性只对基表可用、对视图不可用,也构成对互换性原理的违反(但书中同时
强调,如果把行ID当成面向对象意义上的对象ID来用,那本身就等价于指针,是被
关系模型明令禁止的);[[数据库约束的分类元组约束与AND聚集表述法]]里”单
关系变量约束/多关系变量约束”这组区分其实是有名无实的,因为同一个约束换个
数据库设计就能在两个分类之间互相转换;最重要的一条推论是——视图必须能够
被更新,如果做不到这一点,就是对互换性原理最公然的违反。
参考来源
- 位置:《SQL与关系数据库理论——如何编写健壮的SQL代码》第9章"SQL与视图"
9.1.1节"互换性原理"(源文件:OEBPS/text00100.html)
- 结论依据:原文明确"'互换性原理'……指在基关系变量和虚拟关系变量之间禁止
存在任意的(arbitrary)不必要的(unnecessary)区分,即对于用户而言虚拟
关系变量应该感觉上如同基关系变量一样……视图和基关系变量一样服从完整性
约束……可能是最重要的一点,我们必须能够更新视图。因为如果不是如此,那么
它就是对互换性原理的公然违反"。
- 原始内容:互换性原理……指在基关系变量和虚拟关系变量之间禁止存在任意的
不必要的区分,即对于用户而言虚拟关系变量应该感觉上如同基关系变量一样……
我们必须能够更新视图。因为如果不是如此,那么它就是对互换性原理的公然违反。