Я бы предпочел, чтобы таблица, которую вы явно не могли использовать (Супертип агентства и издателя; Работодатель)
Простая альтернатива - просто не применять ограничение внешнего ключа. Это не обязательно проблематично при условии, что все изменения в структуре данных выполняются с помощью хранимых процедур, которыми вы управляете.
Мое окончательное предпочтение было бы аналогично вашему предложению: иметь одну таблицу для сотрудников агентства и одну для издателей. Но я бы выделил это на один шаг дальше ...
Table1: Agency (id, name, etc)
Table2: Publisher (id, name, etc)
Table3: Employee (id, name, etc)
Table4: AgencyEmployees (agency_id, employee_id)
Table5: PublisherEmployees (publisher_id, employee_id)
Одна из причин, по которой я бы сделал это, состоит в том, что ставить это время в зависимость становится тривиально. Сотрудники начинают, уходят и перемещаются между компаниями. Следующая небольшая поправка к вышесказанному позволит вам отследить это ...
Table1: Agency (id, name, etc)
Table2: Publisher (id, name, etc)
Table3: Employee (id, name, etc)
Table4: AgencyEmployees (agency_id, employee_id, start_date, leave_date)
Table5: PublisherEmployees (publisher_id, employee_id, start_date, leave_date)
Это не обязывает 1 работодателя на одного работника одновременно, но это может быть обеспечено вашими хранимыми процедурами, GUI и т. Д.