Удалить / изменить строку в одной таблице на основе условия - Oracle СУБД - PullRequest
1 голос
/ 20 апреля 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)
);

Я хочу добавить ограничение, в котором мне нельзя разрешать изменять / удалять строки в таблице EMPLOYE, если в таблице SALAIRE существует один и тот же сотрудник.

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

Ответы [ 3 ]

1 голос
/ 20 апреля 2020

Поскольку вы определили отношение внешнего ключа между двумя таблицами в столбце «CodeEmployee», то, что вы хотите, было достигнуто.

Немного расширением является то, что если вы добавите «ON DELETE CASCADE» после объявления fk, то после удаления любой таблицы сотрудников формы строки также будут удалены все связанные записи в таблице зарплат.

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

В этом случае, когда вы создаете таблицу order_items, вы определяете ограничение внешнего ключа с помощью параметра DELETE CASCADE следующим образом:

CREATE TABLE order_items   
(  
    order_id   NUMBER( 12, 0 ),   
    -- other columns  
    -- ...  
    CONSTRAINT fk_order_items_orders     
    FOREIGN KEY( order_id )     
    REFERENCES orders( order_id )   
    ON DELETE CASCADE  
);  
By doing this, whenever you delete a row from the orders table, for example:  

DELETE  
FROM  
    orders  
WHERE  
    order_id = 1;  

Все строки с идентификатором заказа 1 в таблице order_items также автоматически удаляется системой базы данных.

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

Один из лучших способов сделать это - создать ограничение внешнего ключа для столбца «CodeEmploye» во время операторов CREATE TABLE или ALTER TABLE. В вашем случае он уже создан (salaire_code_employe_fk) как часть вашего оператора CREATE. Ограничение внешнего ключа гарантирует, что строка сотрудника из родительской таблицы (EMPLOYE) не может быть изменена / удалена, если тот же сотрудник существует в дочерней таблице (SALAIRE).

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