主キーではなくインデックスを利用する参照整合性等の設定

 主キーでない列でもインデックスにより重複のないように設定すれば、その列を参照している列との間で参照整合性等の設定を行うことが可能となります。
 基本的にリレーションシップは主キーと外部キーとの間で設定すれば事足りますので、そのような例はちょっと珍しいと思いますが参考まで。

 例として右のような自動車テーブルというテーブルを用います。
 このテーブルでは自動車IDを主キーとしています。


 自動車IDは重複しませんが、一般的に自動車のナンバーも重複しませんので、自動車の点検結果を記録するテーブルとしては右のようなテーブルにすることも考えられます。なお、このテーブルの主キーは{ナンバー,点検日}となります。
 このとき、自動車テーブルのナンバーと点検記録テーブルのナンバーの間に参照整合性等を設定できるかどうかですが、結論としては出来ます。


 自動車テーブルのインデックス設定画面を開き、ナンバー列の重複を許さない設定にします(「固有」を「はい」にする)。


 さらにナンバー列の「値要求」を「はい」にします。これは必須ではありませんが、Nullを許すと後で少々奇妙な挙動を招くことがあります(これについては改めて触れます)ので設定しておいた方が好ましいです。


 次にリレーションシップの設定画面で、2つのテーブルのナンバー列の間に参照整合性等を設定してみます。


 エラー等もなく、無事に設定できました。


 自動車テーブルに戻り、連鎖更新が機能していることを確認するためナンバーの値を変更してみます(「横浜100お76-54」を「湘南100お76-54」に変更)。


 無事に変更できました。めでたしめでたしです。


 ところで、主キーによる参照整合性も別途設定できますので、このようにあまり見たことのないような設定も可能です。