Вставить строку в дочернюю таблицу на основе условия из родительской таблицы - Oracle СУБД - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть структура таблицы, такая как

 create table EMPLOYE (
    CodeEmploye varchar2(100) not null,
    NAS varchar2(100),
    CONSTRAINT employe_pk primary key (CodeEmploye)
);

create table SALAIRE (
    CodeEmploye varchar2(100) not null,
    Mois number not null,
    CONSTRAINT salaire_pk primary key (CodeEmploye, Mois),
    CONSTRAINT salaire_code_employe_fk FOREIGN KEY(CodeEmploye) REFERENCES EMPLOYE(CodeEmploye)
);

Я хочу добавить ограничение, в котором мне нельзя разрешать вставку строки в таблицу SALAIRE, если соответствующий CodeEmploye в таблице EMPLOYE NAS = NULL

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 21 апреля 2020

Один из способов сделать это - использовать вычисляемые столбцы:

create table EMPLOYE (
    CodeEmploye varchar2(100) not null,
    NAS varchar2(100),
    CONSTRAINT employe_pk primary key (CodeEmploye),
    has_nas generated always as (case when nas is null then 0 else 1 end),
    CONSTRAINT unq_codeemploye_has_nas UNIQUE (CodeEmploye, has_nas)
);

create table SALAIRE (
    CodeEmploye varchar2(100) not null,
    Mois number not null,
    has_nas generated always as (1),
    CONSTRAINT salaire_pk primary key (CodeEmploye, Mois),
    CONSTRAINT salaire_code_employe_fk FOREIGN KEY(CodeEmploye, has_nas) REFERENCES EMPLOYE(CodeEmploye, has_nas)
);

Здесь - это db <> скрипка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...