これを行うにはCHECK制約を使用する必要があるようですが、属性値の2番目の部分を強制して他のテーブルにあることを確認する方法がわかりません。
他のテーブルを「調べる」ためには、CHECK 制約内で SELECT ステートメントを使用する必要があります。私の知る限り、ほとんどの SQL dbms ではそれができません。(それができない場合、標準 SQL はアサーションを使用します。まだアサーションをサポートしている SQL dbms があるかどうかはわかりません。)
代わりに、2 つの列を使用します。1 つはユーザーが指定する 4 文字用で、もう 1 つはブランチを表す最後の 4 文字用です。使用できます(使用する必要があります)
- ユーザー指定の値を格納する列に対する CHECK 制約により、4 文字以上であることを保証します。
- 列 branch.branch_id に対する CHECK 制約により、4 文字以上であることを保証します。
- テーブル ブランチを参照する、branch_id の外部キー制約。これが更新と削除をカスケードするかどうかを考えてください。
外部キー制約によって保証される動作保証は重要です。新しいテーブルで branch_id に使用する値がブランチのテーブルに存在すること、および使用された branch_id が変更された場合、その変更も新しいテーブルに記録されることを保証します。(更新をカスケードする場合。) また、2 つの値を 1 つの列にまとめた場合、これらの保証は得られません。
最後の 4 文字は、ブランチ ID を使用するためにブランチ テーブルを参照します。
その方法でブランチ ID をコピーすることはできますが、参照することはできません。参照はデータベース設計の専門用語です。外部キー参照に関係しています。