1.5 规则至上
现在我们假设用户只能看到视图LS(而不是视图NLS和基表S)。可以想见这个用户仍然希望可以将视图LS当作基表一样操作。当然,这个用户知道表的语义。
LS:供应商SNO是已经签约的,名称为SNAME,状态值为STATUS且位于城市CITY中(London)。
并且了解如下约束。
{SNO}是LS的键。
LS中的每一行CITY值为London。
很明显,这个用户无法向这个表插入新行,也不能更新表中的供应商编码,因为这样的操作很可能违反约束规则,而用户并不知道这些约束(必须不知道)[7]。但是如果LS是一个基表,那么用户完全可以插入新行。否则,这张表将永远是空的!那么,前面所说的事情不就违背“可交换性原则”了吗?
事实并非如此。尽管这个特定的用户不被允许向这个表插入新行,但并不是所有用户都不可以。这个用户不能插入新行到LS的基本原因是他只是管中窥豹,无法看到全局。对比来看,我们在上一部分所讲的用户可以同时看到LS和NLS,它们合起来等价于表S,因此该用户相当于能够看到全局,也由此他就可以向LS(和/或是NLS)插入新行。但是只能看到LS的用户等于只能看到一部分信息,所以一些特定操作是不允许他执行的。
最后,值得指出的是即便我们遇到的数据格式都是基表,用户也会遇到类似的情况。也就是说,即使涉及的表都是基表,有时某些用户也会被禁止在某些特定的表上执行某些特定的更新。举个例子,让我们想想只能看到基表SP,但是看不到基表S的用户。他会和只能看到表LS的用户一样,无法执行插入操作,因为这样的操作同样可能违反用户并不知道的(必须不知道)约束规则,这个约束就是从SP到表S和P的外键约束。
时间: 2024-11-17 08:21:52