利用表的完整性提高Oracle数据输入准确率(2)

http://www.sina.com.cn 2008年06月10日 17:07  天极yesky

  二、参照完整性

  在一般的管理系统中,无论是小小的考勤系统,还是大的ERP系统,一般都会包含两张表。一张是员工信息表,一张是部门信息表。如下表所示:

员工信息表

员工编号   性别  部门
 SA001  男  销售
 SA002  男  销售
 PR001  男  采购

 部门信息表

部门编号   部门名称
 SA  销售
 SA  销售
 PR  采购

  现在我们希望,在员工信息表处定义的部门信息必须存在与部门信息表中。也就是说,当部门信息表中没有定义这个部门的话,在员工信息表中将部门输入这个部门。如在部门信息表里,我们没有输入研发部门,此时,在员工信息表中,我们若把一个员工归属于研发部门的话,则系统要能够提示错误信息,告诉用户这个部门还没有定义,需要先定义该部门信息。

  这个需求就是要通过参照完整性来实现。参照完整性是指互相关联的两个表之间的约束,具体的说,就是从表中每条记录外键的值必须是主表中所存在的。因此,如果在两个表之间建立了关联关系,则对一个表进行的操作要影响到另一个表中的记录。下面,我结合具体的实例,讲述一下参照完整性的具体实现方式及需要注意的地方。

  1、 建立部门信息表

  

利用表的完整性提高Oracle数据输入准确率(2)

  表建立完成以后,给部门信息表中插入销售与采购两条记录。

  

利用表的完整性提高Oracle数据输入准确率(2)

  技巧说明:当我们利用语句给一个表中插入记录的时候,如果表中有两个字段,我们给这两个字段都赋值的话,则在插入语句中,可以不写字段的名称。但是,若插入一条记录的时候,一条记录的某个字段没有赋值的话,则要注意一定要按赋值的顺序把字段名一一写清楚。

  2、 建立员工信息表,先不设置外键,看效果如何

  

利用表的完整性提高Oracle数据输入准确率(2)

  下面,我们给员工信息表插入一条记录,部门为研发部门(AD)。该部门信息在部门信息表中不存在。在没有建立参照完整性的条件下,数据库将不会提示任何的错误。

  

利用表的完整性提高Oracle数据输入准确率(2)

  3、 给员工信息表实现参照完整性功能,给其部门字段设置外键

  从上面的记录中可以看到,不设置外键的情况下,即使部门信息表中没有这个部门信息,但是,在员工信息表中仍然可以把员工归属于“研发”部门。这在实际管理中,肯定会出乱子。所以,我们希望当部门信息表中没有研发部门的部门信息时,员工信息表中就也不能出现这个部门。

  我们先个员工信息表的部门字段定义一个外键。

  

利用表的完整性提高Oracle数据输入准确率(2)

  如图所示,当员工信息表中已经有记录,并且,该记录的部门编号不存在与部门信息表中,在建立主键的时候,就会产生错误信息,提示此列列表的唯一或主键不匹配。我先把该条记录的部门信息更新一下,然后再建立主键。

  

利用表的完整性提高Oracle数据输入准确率(2)

  这里要注意一个问题,就是主表中的某个字段如果要被其他表设置为外键的话,则这个字段要先设置为主键,否则在建立外键的时候,会报错。

  4、 给员工信息表插入记录,部门字段不在部门信息表中,系统提示错误信息

  

利用表的完整性提高Oracle数据输入准确率(2)

  如上图所示,没有建立主键的员工信息表可以顺利插入数据,但是,在下面已经建立了外键的表中的话,插入记录的话,会提示错误信息“违反完整约束条件,未找到父项关键字”。

上一页 1 2 下一页
本文导航:
·实体完整性
·参照完整性

发表评论 _COUNT_条
Powered By Google
不支持Flash
·城市对话改革30年 ·新浪城市同心联动 ·诚招合作伙伴 ·企业邮箱畅通无阻
不支持Flash