Моей первой мыслью было создание таблицы, которая связывает отдельных утверждающих с строками повышения зарплаты.
create table pay_rise_approvers (
pay_rise_id integer not null references some_other_pay_rise_table (pay_rise_id),
pay_rise_approver_id integer not null references users (user_id),
primary key (pay_rise_id, pay_rise_approver_id)
);
Невозможно иметь хорошие внешние ключи, которые иногда ссылаются на менеджеров, и ссылаться на зарплату в других случаях.Пользователи кажутся логической целью для внешнего ключа.
Если человек, создающий строки повышения зарплаты (не показаны), выбирает менеджеров, то пользовательский интерфейс отвечает за вставку одной строки на менеджера в эту таблицу.Эта часть проста.
Человек, который входит в более чем одну группу, может быть проблемой.Я могу представить себе вице-президента, выступающего в группах «Исполнительный» и «Финансовый».Я не думаю, что с этим особенно трудно справиться, но это требует некоторой предусмотрительности.Предположим, что человек, который ввел данные, передумал и решил удалить всех руководителей из таблицы.Должен ли быть удален руководитель, который также работает в сфере финансов?
Другая проблема заключается в том, что существует довольно хороший шанс, что не каждому пользователю будет разрешено одобрить повышение зарплаты.Я бы подумал над этим, прежде чем реализовывать какое-либо решение.