外部关键字的概念问题(60分)

  • 主题发起人 主题发起人 qlw
  • 开始时间 开始时间
Q

qlw

Unregistered / Unconfirmed
GUEST, unregistred user!
刚才试了一下

在paradox表中,对主表和从表记录的删除都不允许的。(指主表在从表中有记录的情况)

在interbase表中,可以删主表而不能删从表的记录。

我难以理解:各个数据库对外键的概念不同吗?设外键的目的,究竟是以显示主从表为

主还是以实现引用完整性为主?引用完整性似乎可以用触发器做,比当某表被删除时就

检查它在从表中是否有记录,如有就不删。比如:

create trigger delete_test
on db1 for delete
as if (select count(*)from db2)>0
rollback transaction
...

对这个问题应该怎样理解,请指教
 
>>引用完整性似乎可以用触发器做,比当某表被删除时就
>>检查它在从表中是否有记录,如有就不删。
trigger 不能编译执行效率低,多了会严重影响数据库的效率

 
那么这个规则该如何实现呢

如上例子,用外部关键字没能实现数据完整性,还是得自己编程做,而
这些规则如果都放在客户端,好象又背离了做三层的初忠。。。这样推
理来,最后还是要用触发器?

各位大虾可否介绍一下经验,外部关键字除了显示主从表,还能做什么?

 
>>在interbase表中,可以删主表而不能删从表的记录。

按道理,这两种情况都不对,是否你弄错了?
外键的主要作用就是数据一致性检查,按我自己造的词:不能出现“悬空”记录。
既:从表有记录,主表不能删除或修改;从表添加数据时,主表必须有相关记录;
有些数据库在此基础上,可做到连锁删除、连锁更新(可选)。
用触发器完全可代替外键,而且可自己决定是否允许删除或修改主表数据。
我个人一般不用外键,完全用触发器。
你可考虑混合使用。

 
你肯定搞错了
在存在子表纪录时,不允许删除主表纪录,怎么能限制子表纪录的删除.
外键本来就是用来实现参照完整性的.
 
邪门了!

偶在interbase下试了多遍,除了删从表报错,其它的添加,修改,删除主表

记录均能执行。如此看来interbase的外键根本无法实现引用完整性?

是否在网球数据库中,不使用外键来实现数据完整性呢,联想起前几天拜读

李颖的数据库备份组件,他在取索引信息时也没考虑外键。

由于偶的机器太破,没装sql server,不知在sql server下是什么情况?

还请各位大虾赐教

 
多人接受答案了。
 
后退
顶部