Access で異なるテーブルのフィールドを関連付けるためにリレーションシップを設定します。
そして、そのリレーションシップを設定する際には「参照整合性」を選択する場合が多いです。
さて、「参照整合性」を選択するとさらに、「フィールドの連鎖更新」「レコードの連鎖削除」の2つの項目を選択できるようになります。
今日は、この「フィールドの連鎖更新」「レコードの連鎖削除」について説明します。
1、2つのテーブルで経費の「科目コード」を関連付ける場合
さて、「経費内容」テーブルと「科目コード」テーブルの2つのテーブルを作成します。
「経費内容」テーブル
デザインビュー↓
データシートビュー↓
「科目コード」テーブル
デザインビュー↓
データシートビュー↓
リレーションシップ
以下の2つのフィールドにリレーションシップを設定しています。
●経費内容テーブルの「科目コード」フィールド
●科目コードテーブルの「科目コード」フィールド
「参照整合性」にもチェックを付けてあります。
*参照整合性にチェックを付けると、1対多のリレーションシップが設定されているフィールドの1側に入力が無いデータは多側のテーブルで入力できなくなります。また、多側にデータが残っている場合は1側でデータを変更・削除できなくなります。1対多両方のテーブルの「科目コード」フィールドが整合していることになるのです。
2、「フィールドの連鎖更新」「レコードの連鎖削除」
さて、リレーションシップを設定する際に「参照整合性」にチェックを付けるとその下にある「フィールドの連鎖更新」「レコードの連鎖削除」も選択できるようになりまs。
それぞれ、選択した場合にどのような効果を有するか説明したいと思います。
フィールドの連鎖更新
まず、「フィールドの連鎖更新」を設定していない場合どのようなことが起こるか説明しておきます。
科目コードテーブルの「科目コード」フィールドのデータを変更してみます。
すると変更を行うことができない旨のアラートが表示されます。
経費内容テーブルの「科目コード」フィールドも変更していません。
「参照整合性」を設定していると、多側(経費内容テーブル)にデータが残っている場合は1側(科目コードテーブル)でデータを変更・削除できなくなるのです。
1側を変更したら多側も連動して変わるようにしたいですよね。
例えば、1側で「科目コード」の1つを101 から 102 に変更したら、多側ですでに 101と入力してある科目コードを一括で102に変更してほしいということです。
そのために、使えるのが「フィールドの連鎖更新」なのです。
リレーションシップを表示(「データベース」タブの「リレーションシップ」を選択)させた状態で結合線上をダブルクリックします。するとリレーションシップのボックスが出てくるので「フィールドの連鎖更新」にチェックを入れましょう。
さて、この状態で先ほどと同じ操作をしてみましょう。科目コードテーブルの「科目コード」フィールドのデータを変更してみます。
すると、経費内容テーブルの「科目コード」フィールドも一括で置き換わることが確認できます。
レコードの連鎖削除
まず、「レコードの連鎖削除」を設定していない場合どのようなことが起こるか説明しておきます。
科目コードテーブルの「科目コード」フィールドのレコードを削除してみます。
科目コードテーブルをデータシートビューで開いて、科目コードが102のレコードを選択します。
右クリックして「レコードの削除」を選択してみましょう。
すると、レコードを削除できない旨のアラートが表示されす。
実際に経費内容テーブルを確認しても何も変わっていません。
科目コードテーブル(1側)である「科目コード」のレコードを削除したら、経費内容テーブル(多側)の該当するレコードも削除されるようにしたいです。
そのために、使えるのが「レコードの連鎖削除」なのです。
リレーションシップを表示(「データベース」タブの「リレーションシップ」を選択)させた状態で結合線上をダブルクリックします。するとリレーションシップのボックスが出てくるので「レコードの連鎖削除」にチェックを入れましょう。
さて、この状態で先ほどと同じ操作をしてみましょう。科目コードテーブルの「科目コード」フィールドのレコードを削除してみます。
科目コードが102のレコードを削除をしようとすると、削除しても良いかの確認メッセージが出てきますので「はい」を選択します。
これによって、経費内容テーブルの中の科目コードが102のレコードも一括して削除されました。
3、まとめ
リレーションシップ設定時(参照整合性)の「フィールドの連鎖更新」「レコードの連鎖削除」について説明しました。
「参照整合性」「フィールドの連鎖更新」「レコードの連鎖削除」それぞれがどのような機能を有するか1つ1つ整理して理解を深めたいところです。