Я пытаюсь найти решение для этого.Вопросы, связанные с циклическими внешними ключами Oracle
Для класса базы данных, мне нужно реализовать следующее:
Table HUSBANDS: (Name Varchar2(10)) (Wife Varchar2(10))
Table WIVES: (Name Varchar2(10)) (Husband Varchar2(10))
и с использованием ограничений Oracle, enfore следующих правил:
- Нет два мужей не могут иметь такое же имя
- Нет двух жен могут иметь одно и то же имя
- Каждая жена должна иметь один и тот же муж
- Каждый муж должен иметь один и только один жена
До сих пор я реализовал таблицу в Oracle SQL:
create table husbands(
name varchar2(10) not null
, wife varchar2(10) not null
);
create table wives(
name varchar2(10) not null
, husband varchar2(10) not null
);
Я уверен, что я решил пункты 1 и 2 с использованием правильных первичных ключей:
alter table husbands
add constraint husbands_pk
primary key(name);
alter table wives
add constraint wives_pk
primary key(name);
И вот где я столкнулся с проблемами. Я полагал, что использование внешних ключей для выполнения шагов 3 и 4:
alter table husbands
add constraint husbands_fk_wife
foreign key(wife)
references wives(name);
alter table wives
add constraint wives_fk_husband
foreign key(husband)
references husbands(name);
Теперь тест мой профессор использует это, чтобы иметь возможность добавить семейную пару в базу данных. Проблема, с которой я столкнулась, заключается в том, как это сделать, используя только ограничения. Если бы я хотел добавить Джека и Джил в качестве супружеской пары, нельзя добавить мужа, пока не будет добавлена жена. жена не может быть добавлена до тех пор, пока не будет добавлен муж.
Я думаю, что моя проблема заключается в использовании внешних ключей. Ограничение проверки может работать в этой ситуации, но я не могу концептуализировать, как это будет работать.
Отсутствующим существенной часть делает ограничение откладываемым. См. Http://www.oracle-base.com/articles/8i/ConstraintCheckingUpdates.php –