Database 如何在所有表上启用触发器,这些表对oracle 11g中的另一个表具有外键引用?

Database 如何在所有表上启用触发器,这些表对oracle 11g中的另一个表具有外键引用?,database,oracle,triggers,foreign-keys,data-consistency,Database,Oracle,Triggers,Foreign Keys,Data Consistency,在数据库中,我有一个名为Organization的基表,大多数表都有它的外键。假设以下为ERD: 如您所见,Organization表中有一个名为的列已启用。现在,如果我想禁用组织,我应该将设置为1。这很简单,但问题是,如果我想阻止所有其他过程和函数使用禁用的组织,我应该在所有对组织表有外键引用的表上定义触发器,这种方法不好 是否有其他方法防止所有对象使用禁用的组织s? 另外,对于插入或更新数据,例如,如果我有一个组织的org1标题,如果它有一个部门的dep1名称,在我禁用org1后,我无法更

在数据库中,我有一个名为
Organization
的基表,大多数表都有它的外键。假设以下为ERD:

如您所见,
Organization
表中有一个名为
的列已启用。现在,如果我想禁用
组织
,我应该将
设置为
1
。这很简单,但问题是,如果我想阻止所有其他过程和函数使用禁用的
组织
,我应该在所有对
组织
表有外键引用的表上定义
触发器
,这种方法不好

是否有其他方法防止所有对象使用禁用的
组织
s?
另外,对于插入或更新数据,例如,如果我有一个
组织
org1标题,如果它有一个
部门
dep1名称,在我禁用org1后,我无法更新dep1名称,对于所有引用了
Organization

的表,都存在此问题。如果要阻止用户更改已禁用组织的数据,则应在存储过程或应用程序代码中的代码中。您可以在用户界面中设置一些逻辑或限制,以防止对禁用的组织进行更改(实际实现取决于您的需求)

我在评论中提出的另一个问题(正如Bob Jarvis所提到的)是,为什么有800个带有组织ID的表?这似乎没有正常化


例如,为什么一个人直接链接到组织表?他们可以链接到department表吗?department表有自己与组织的链接吗?

在这个表中是的,但在其他表中可能存在两列或更多列800个表,其中外键引用了组织,这是我想说的。尤其是800张只有几列的表格???我做了一个简单的ERD来识别问题,而且每个表都有自己的列请澄清“使用”的含义。当引用禁用组织的记录被a)更改b)查询时会发生什么情况?不应在触发器中实现诸如“不允许更新禁用组织”之类的业务逻辑。更好的解决方案是有一个过程,您可以调用该过程来执行所需的操作,并进行所有需要的一致性检查。祝你好运。顺便说一下,我应该更改存储过程中代码中的许多位置。但我不想这么做,因为有很多变化。对于你的问题,正如你在评论中所说的,我创建了一个简单的ERD来避免问题的复杂性。实际模型越大,列越多。有哪些替代方案?如果数据库和系统设计得很好,那么在正确的地方进行更改应该很容易。如果很难阻止用户为一个残废的组织更新数据,那么您应该重构代码,使其更易于更新。短期痛苦换取长期收益:)