在oracle用sql怎样定义这个数据库的完整性?(100分)

  • 主题发起人 主题发起人 chonsee
  • 开始时间 开始时间
C

chonsee

Unregistered / Unconfirmed
GUEST, unregistred user!
talbe 1
职工信息(职工号,name,salary,sex,部门号)
table 2
部门信息(部门号,name,负责人,人数,所属部门号)
由于一个部门旗下可能有好几个部门,所以在删除一个部门信息时要把
该部门的职工信息全部删除,又要把他所属部门的信息全部删除,请
用sql怎样定义这个关系的完整性(在oracle中)?
 
create table2
( T2DepID...,
T2DepUPID...,
...,
constraint pk_DepID primary key(T2DepID)
)

create table1
(...
constraint pk_EmpID primary key(T1EmpID),
constraint fk_DepID foreign key (T1DepID) references table2 (T2DepID)
)

其它就用触发器控制了,偶就偷懒了
 
oracle 的外键支持级联删除,用外键就可以了
 
方法有一些,你可以触发器,
create or replace TRIGGER Delete_YouTable
AFTER DELETE OF 部门号
on table2
FOR EACH ROW
begin
delete from table1 where 部门号=:OLD.部门号;
end;
end;
若你要考虑到以后的程序可移植性,就自己写SQL在程序中,用事务保护,先删员工,再删部门,
这个我就不用多说了吧.
另外一点,你的所属部门在哪儿呢?也在部门那个表里吗?若在同一个表中,就不能用触发器了.
触发器中不能又触发本表,不然要进入死循环.
建表的时候要加上外键保护,这样就是出了错也知道哪儿出错,不然删没删掉都不知道.建议
就是这些,自己好好想一下就通了.
 
你可以用触发器
 
在程序中写SQL语句是一种错误,建议用数据库一级实现该功能 如 TIGER PROCEDURE 或是
FUNCTION 一类的OBJECT
 
触发器和外键都可以解决
 
所属部门就在部门表中
 
用sql怎样定义呢?
 
后退
顶部