【问题标题】:oracle foreign key returns nulloracle 外键返回 null
【发布时间】:2018-10-10 11:19:18
【问题描述】:

目前我正面临一个预言机约束问题。

提交插入后,我的外键约束不会触发。它应该做的是给两个表相同的ID,但不幸的是只有一个具有主键的表给出了一个ID。第二个表中具有外键的列保持为空。

例如:插入表 t1 (t1_id,name, dpt) 值 (value1 (触发 id 的自动增量), value2, value3);表2、表3后面也是同样的过程……所有的约束都写对了

表 1 (Emp)

ID  Name  Department
1   Joe   HR                          

表 2(项目)

ID  Project EmpID
1   new     (null) -> must be 1

谢谢你。

约束:ALTER TABLE "PROJECTS" ADD CONSTRAINT "EMP_FK" FOREIGN KEY ("EMP_ID") REFERENCES "EMP" ("EMP_ID") ON DELETE CASCADE ENABLE

触发器:create or replace TRIGGER Projects_TRG BEFORE INSERT ON Projects FOR EACH ROW BEGIN :NEW.Project_ID := Projects_SEQ.NEXTVAL; END;

我如何设法将父表中的父 id 填充到子表中?

请注意,我在应用程序中使用了不同的名称。

【问题讨论】:

  • APEX 不做表约束;这就是数据库的工作。

标签: oracle triggers constraints


【解决方案1】:

您似乎误解了外键约束的目的。外键约束不会自动将约束值从父表传播到子表。约束的目的是确保子表中键列的值在填充时在父表的键列中具有匹配值。您的应用程序负责确保使用适当的值填充子表上的键列。约束不会为您做到这一点。假设子表上的列没有 NOT NULL 约束,在子表的键列中具有 NULL 也是完全合法的。

【讨论】:

  • 感谢您的回复。我如何设法将父项中的值填充到插入时的子表中?
  • 嗯,您需要有某种方法来了解应该将哪些员工分配给项目。我不知道你应该如何在你正在开发的任何环境中做到这一点。我会建议您可能不应该在 PROJECT 表上有员工 ID,也不应该在 EMP 表上有项目 ID。相反,您应该有一个 PROJECT_EMPLOYEE 表,其中包含一个项目 ID 和一个员工 ID - 这样就可以轻松地将多个员工添加到一个项目中,并且一个员工可以参与多个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
相关资源
最近更新 更多