目次
1対1のリレーションで何ができる
こんにちは。伊川(@naonaoke)です。
今回は、一対一のリレーションについて説明します。
クエリとは分野が違うかもしれませんが、実際に、伊川の同僚から質問を受けた内容です。
その時にクエリを使ったので、この機会に一対一のリレーションについて説明します。
※動画の内容とは少し異なっていますが、ほとんど同じです。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は、上司から下記のような依頼を受けました。
・佐藤 花子はすでに退職しているため、すべてのデータを一括で削除するようにしたい。
・人権費は、1箇所変更すると、すべてのデータに反映するようにして欲しい。
・Excelではなく、ACCESSで行うこと。
この時点で、阿久 世子男(アク セスオ)は、何をいっているのか分かりません。どうしたら、いいだろうか?
解決策
・すべてのテーブルにリレーションを設定する
・結合方法を、すべてのテーブルに反映するように設定を変更する
リレーションの設定
上の図のように、3つのテーブルがあります。
MT_社員名簿、MT_給料、MT_賞与があります。
ACCESSの鉄則は、主キーを捜すこと
ACCESSの作成を依頼されたら、主キーが設定されているか、主キーが設定できるかを考えます。
次に、オートルックアップクエリが使えるかを考えます。オートルックアップクエリが使えない場合は、クエリで操作することを考えます。上の図を見る限り、ID、社員IDが主キーに設定できそうです。今回の場合においては、ID、社員ID全部を主キーに設定します。
リレーションを実際に設定する
上の図のようにリレーション設定画面に3つのテーブルを設置します。
設定画面を表示する方法は、下記の記事を参照してください。
主キーと主キーに、リレーションを設定するときは、必ず、一対一になります。
オートルックアップクエリのときは、一対多のリレーションでしたが、今回は、一対一になります。
次に
・フィールドの連鎖更新
・レコードの連鎖削除
この3つにすべて、チェックを入れます。
すべてのリレーションの設定について、【1】という数字がついています。
これが一対一のリレーションが設定された証拠になります。
クエリを作成する
上の図のように、クエリデザインの画面で、すべてのテーブルを表示させると、自動で一対一のリレーションが設定されます。
このリレーションの黒い線を選択して、右クリックすると、【結合のプロパティ】が表示されます。
【結合のプロパティ】をクリックします。
規定では、【1】が選択されています。
上の図のように、【2】へ変更します。
MT_社員名簿を起点に、MT_賞与とMT_給料に、矢印がついていたら完成です。
ID、社員ID、名前は、MT_社員名簿から選択します。
賞与は、MT_賞与から選択します。
給料は、MT_給料から選択します。
これで完成しました。
これで、すべてのテーブルが連鎖で操作可能になります。
ただし、新入社員を追加する場合は、必ずMT_社員名簿から追加します。
社員名簿に記載がない人に人権費が発生するわけがないからです。
だから、MT_社員名簿を起点にリレーションを設定したのです。
そして、いったん、ACCESSにMT_社員名簿を起点にリレーションを設定することによって、ACCESSも矛盾をゆるしてくれないのです。
エラーになる瞬間
MT_給料から、名前を追加したときに表示されるエラーです。
Q_人件費から、すでに退職した佐藤花子を削除する
Q_人件費から、佐藤花子を削除します。
このように、MT_社員名簿から削除されました。
MT_社員名簿に名前がないということは、MT_給料、MT_賞与も連鎖して削除になります。
山田太郎の人件費をQ_人件費から変更した
Q_人件費から、山田太郎の人件費を、20万円から、1,000万円に変更しました。
MT_給料の、山田太郎の人件費も1,000万円に変更になって、変更されています。
MT_賞与の変更は、割愛します。
データベースの原則は、一度、入力した値は、
まとめ
今回は、クエリにリレーションが絡んできました。
しかし、慌てることはありません。
確実に設定をすることで、便利になります。
サンプルファイルで、遊んでみてください。