【发布时间】:2020-12-14 18:34:52
【问题描述】:
大家好,我在 oracle sql 中创建了两个表,第一个有 2 列,第二个有 3 列(其中一个是来自第一个表的 Pk 的外键)。 我想创建一个触发器,在我更新第二个表中的外键列之后,将根据 pk 的值更新其他列。
- Table1(idF,名称)
- table2(id, idF, name)
我想创建一个触发器,当我在 table2 中更新 idF(外键)时,将显示与 table1 中相同的名称。
【问题讨论】:
-
请仅使用您真正使用的数据库进行标记。我删除了无关的数据库标签。
-
为什么? FK 的目的是将表联系在一起,而不必重复信息。如图所示,我看不到 table2 的原因。
-
这只是一个更好理解的例子
-
这可能是“只是一个更好理解的例子”,但@AdrianKlaver 的观点非常笼统。您的数据模型违反了表设计的第三范式。
Table2中的列idF不是候选键(即使您想要它也不能是表中的主键),但它仍然完全确定列name。这会导致很多问题——例如,需要创建像您现在正在考虑的触发器一样的触发器。不要将依赖属性name存储在第二个表中;仅将其存储在第一个表中。 -
如果您需要
Table2中的预计算名称,例如为了更快地执行查询,请使用 view(在这种情况下很可能是物化视图) .这是比触发器更好的方法。