Ах, типы и подтипы.
Сотрудник SALES - это подтип EMP.Предположим, что первичный ключ EMP - EMP_ID.Вы можете создать новый столбец SALES_EMP_ID в EMP и проверочное ограничение, чтобы оно было установлено только там, где сотрудник находится в SALES, и, если оно установлено, оно должно быть равно EMP_ID.И еще одно ограничение для обеспечения уникальности.
Затем вы можете создать ограничение ссылочной целостности от ORDERS до EMP.SALES_EMP_ID. См. Следующую демонстрацию.Только первые две вставки в T_EMP будут успешными - остальные проверяют проверочные ограничения.Из вставок в T_ORDERS, только первый (продавец) будет успешным.
drop table t_emp purge;
CREATE TABLE t_emp
(emp_id number primary key, emp_name varchar2(20),
dept_name varchar2(10),
sales_emp_id number,
constraint sales_emp_id_sales_ck check
((sales_emp_id is null and dept_name != 'SALES') or
(dept_name = 'SALES' and sales_emp_id = emp_id and sales_emp_id is not null)),
constraint sales_emp_id_uk unique (sales_emp_id));
insert into t_emp values (1,'Alan','SALES',1);
insert into t_emp values (2,'Bill','ACCOUNTS',null);
insert into t_emp values (3,'Chuck','ACCOUNTS',3);
insert into t_emp values (4,'Dan','SALES',null);
insert into t_emp values (5,'Ellen','SALES',6);
select * from t_emp;
create table t_orders
(ord_id number primary key,
salesman number,
constraint salesman_fk foreign key (salesman) references t_emp(sales_emp_id));
insert into t_orders values (1,1);
insert into t_orders values (2,2);