Как воссоздать связь ar c в Oracle Database Modeler в Oracle APEX? - PullRequest
1 голос
/ 06 мая 2020

Я не уверен, как записать ограничение внешнего ключа в Oracle APEX, которое будет представлять отношение ar c в Oracle разработчике моделей баз данных.

1 Ответ

1 голос
/ 06 мая 2020

Вы можете позволить разработчику данных сгенерировать реляционную модель и код DDL. Затем откройте редактор сценариев SQL в APEX, вставьте код DDL, дайте сценарию имя и выполните его - см. Снимки экрана ниже.

(пример) ERD

ERD

Реляционная модель (сгенерированная)

Relational model

DDL-код (сгенерированный)

DDL code

Редактор сценария APEX (обратите внимание на ограничение CHECK, обеспечивающее выполнение "ar c ")

APEX script editor

Скрипт выполнен

enter image description here

Возможно, вам придется немного подправить сценарий (если есть сообщения об ошибках).

Затем вы должны провести некоторое тестирование, чтобы увидеть, что «ar c» действительно работает, например,

Тестирование

-- 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
...