First, you don't have to duplicate data.
If you add an inspector
table, that's not duplicating. You need an "inspectors" entity in your model, you add an "inspector" table. Only the inspector_id
values will be duplicated which is fine. So, that's solution A.
Solution B might be to add a an is_inspector
column in the table you want to have the foreign key and restrict that column to TRUE
:
is_inspector BOOLEAN DEFAULT TRUE,
CHECK (is_inspector),
FOREIGN KEY (inspector_id, is_inspector)
REFERENCES employee (id, is_inspector)
I would go for solution A every time but if solution B simplifies your application code for some reason, it still solves the issue and enforces the same requirements. But if you later need other tables to reference "inspectors", you'll need a boolean column in every one of them as well. So, solution A is the more simple approach as it would not require any such boolean columns at all (not even at the employee
table, you can find the inspectors by joining to the inspector
table).