如何在 Oracle APEX 的 Oracle Database Modeler 中重新创建弧关系?

How do you recreate the arc relationship in the Oracle Database Modeler in Oracle APEX?

我不确定如何在 Oracle APEX 中写出表示 Oracle Database Modeler 中弧关系的外键约束。

您可以让数据建模器生成关系模型和DDL 代码。然后,在 APEX 中打开 SQL 脚本编辑器,粘贴 DDL 代码,为脚本命名,然后执行它 - 请参见下面的屏幕截图。

(示例)ERD

关系模型(生成)

DDL代码(生成)

APEX 脚本编辑器(注意强制执行 "arc" 的 CHECK 约束)

脚本已执行

您可能需要稍微调整脚本(如果有错误消息)。

然后,你应该做一些测试,这样你就会看到 "arc" 确实有效,例如

测试

-- these 3 INSERTs must fail
-- {1} event without a "venue id"
insert into event ( 
  id, eventdate, private_home_id, public_space_id 
) values (
  1, sysdate, null, null
) ;
-- ORA-02290: check constraint (...ARC_1) violated

-- {2} private home does not exist
insert into event ( 
  id, eventdate, private_home_id, public_space_id 
) values (
  1, sysdate, 1000, null
) ;
-- ORA-02291: integrity constraint (...EVENT_PRIVATE_HOME_FK) violated - parent
key not found

-- {3} public space does not exist
insert into event ( 
  id, eventdate, private_home_id, public_space_id 
) values (
  1, sysdate, null, 2000
) ;
-- ORA-02291: integrity constraint (...EVENT_PUBLIC_SPACE_FK) violated - parent
key not found

将一些数据插入 PRIVATE_HOME 和 PUBLIC_SPACE 表

-- add a PRIVATE_HOME and a PUBLIC_SPACE
insert into private_home( id, vname ) values ( 1000, 'The Manor' ) ;
insert into public_space( id, vname ) values ( 2000, 'Royal Albert Hall' ) ;


-- add 2 events
insert into event ( 
  id, eventdate, private_home_id, public_space_id 
) values (
  1, sysdate, 1000, null
) ;

insert into event ( 
  id, eventdate, private_home_id, public_space_id 
) values (
  2, sysdate, null, 2000
) ;

select * from event ;
SQL> select * from event ;

        ID EVENTDATE PRIVATE_HOME_ID PUBLIC_SPACE_ID
---------- --------- --------------- ---------------
         1 06-MAY-20            1000                
         2 06-MAY-20                            2000