テーブル設計について質問させていただきます。
RDBMSはMySQL8.0です。
以下具体例をあげます。
例
以下のようなエンティティがあったとします。
(凡例)エンティティ名: フィールド1, フィールド2, ...
- 求人: 求人id(PK), 勤務地, 給与, 職種id(FK)
- 職種: 職種id(PK), 名称, 資格要否
以下のように関連付けしたとします。
求人 (0..n) - (1) 職種
しばらくして、職種ごとに異なる求人情報を保持したくなったとします。
求人を継承する以下のエンティティを用意することにしました。
(Railsアプリケーションから利用するため、継承はSTIにより実現し、テーブル数は増やさずに求人テーブルにtypeカラム+αを追加する予定です。)
- エンジニア求人: エンジニア求人id(PK), 使用言語
- 看護師求人: 看護師求人id(PK), 診療科
- 教員求人: 教員求人id(PK), 校種
これでいったんは必要な情報を保持することができました。
問題
ここで以下の条件があったとします。
「"XXXX勤務条件"というtypeカラムの値は、名称: XXXXである職業レコードがに存在するときのみ存在できる」
ex1. 「名称: エンジニア」である職業レコードが存在するので、「エンジニア勤務条件」は存在できる
ex2. 「名称: 営業」である職業レコードが存在しないので、「営業勤務条件」は存在できない
この制約は(アプリケーションレベルではなく)RDBレベルにおいて表現可能でしょうか? 可能である場合、どのような方法があるでしょうか?
あるいは、そもそも上記の議論に不適切なところがあるでしょうか?
ご教示のほどよろしくお願いします????
[追記]
「求人テーブルのtypeカラムにenum制約を設け、職種テーブルのinsertをトリガーにしてenumで許容する値を追加する」という方法が思いつきました。
アイデアレベルであり、実現可能かが見極められていないので引き続き回答を募集させていただきます。