Вы не разместили структуры таблиц, но эту проблему легко решить с помощью правильной проекции для таблицы пересечений ProjectStaff
.Я бы решил эту проблему, поместив столбец ROLE_TYPE (т. Е. Является ли сотрудник руководителем или ведомым) на этой таблице.
Чтобы эта таблица выглядела следующим образом:
create table projectstaff (
projectno varchar2(5) not null
, staffno varchar2(5) not null
, roletype varchar2(10) constraint projectstaff_role_ck check (roletype in ('Leader', 'Minion'))
, constraint projectstaff_pk primary key (projectno, staffno)
, constraint projectstaff_project_fk foreign key (projectno) references project
, constraint projectstaff_staff_fk foreign key (staffno) references staff
);
Тогдамы создали уникальный основанный на функции индекс , который позволяет нам применять правило, согласно которому в проекте может быть только один сотрудник с назначенным ROLETYPE «Лидер».
create unique index projectstaff_uidx on projectstaff
(projectno, case when roletype = 'Leader' then roletype else staffno end)
;