全球旧事资料 分类
求在视图中包含所有的非空字段呢答案是肯定的。因为数据库系统在提交更新事务之前就会对这个条件进行判断。条件三:需要更新的列不是虚拟列。在视图中,可能有些列的结果是通过列表达式定义的,在基础表中并不存在。我们把这些列叫做虚拟列。如在上面的员工信息表中,并没有员工的出生年月信息。而在视图中,我们可以通过身份证号码来取得某个员工的出生日期。此时若想在视图中更改这个出生日期,则很明显是不行的。因为基础表中根本没有这个字段,那更改的结果就无法保存。只要在视图中有虚拟列的存在,只要视图中任何一列是由列表达式定义的,那么对不起,整张视图都不能够进行更改。这个控制原理跟上面这个条件是类似的。可见,在数据库设计的时候,就需要考虑是否需要在视图基础上对表的内容进行更改。若需要更改的话,则一定不能够在视图中采用虚拟列,而宁愿在表中多增加一些字段。或者在数据库视图中不采用虚拟列,而是在前台应用程序中采用虚拟列。条件四:不能够具有分组函数。如上面这张员工与职位的对应关系表中,用户不但想知道某个职位现有的员工有哪些还希望知道,某个职位现在员工的具体人数。要实现这个需求的话,则数据库管理员就需要在视图中采用分组函数,来统计某个职位的具体人数。
f但是,若视图中有这个函数的话,则也不能够对这张视图进行更新。这是Oracle数据库的强制规定。其实,这也可以通过一些灵活的方式来避免。如在数据库视图中不需要采用分组函数。而是在前台的Select语句中,查用分组函数。因为前台要调用数据库中的数据,仍然需要查用Select语句去查询视图。所以,即使在原始的数据库视图中不对数据进行分组,则在前台应用程序中仍然可以帮助用户完成数据分组与统计的任务。此时,用户若在视图中更改数据的话,不仅可以更新数据库基础表中的内容而且,还可以及时的反馈到前台的应用程序界面中。分组函数会增加数据库查询的负担同时,使得无法在视图上采取DML操作。故数据库管理人员需要跟前台应用程序开发人员进行协商,在前台实现对数据的分组统计,而不是在后台。除了以上几个限制条件之外,若需要在视图上进行DML操作的话,则在建立视图的Select语句中,还不能够有集合运算符、子查询等等。以上这些是一些必须要满足的基本条件,缺一不可。否则的话,针对视图的DML操作,就会以失败告终。但是,并不是说符合了上面这个几个条件后,视图就可以畅所无阻的进行数据更新了r
好听全球资料 返回顶部