1対1のリレーションで何ができる

こんにちは。伊川(@naonaoke)です。

今回は、一対一のリレーションについて説明します。

クエリとは分野が違うかもしれませんが、実際に、伊川の同僚から質問を受けた内容です。

その時にクエリを使ったので、この機会に一対一のリレーションについて説明します。

※動画の内容とは少し異なっていますが、ほとんど同じです。

問題提起

 

(株)IKAWAの阿久 世子男(アク セスオ)は、上司から下記のような依頼を受けました。

佐藤 花子はすでに退職しているため、すべてのデータを一括で削除するようにしたい。

・人権費は、1箇所変更すると、すべてのデータに反映するようにして欲しい。

・Excelではなく、ACCESSで行うこと。

この時点で、阿久 世子男(アク セスオ)は、何をいっているのか分かりません。どうしたら、いいだろうか?

解決策

回答
sesuo2.jpg
・すべてのテーブルにリレーションを設定する
・結合方法を、すべてのテーブルに反映するように設定を変更する

リレーションの設定


上の図のように、3つのテーブルがあります。

MT_社員名簿、MT_給料、MT_賞与があります。

ACCESSの鉄則は、主キーを捜すこと

 

ここがポイント
Function8.png
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_賞与の変更は、割愛します。

 

ここがポイント
Function8.png
データベースの原則は、一度、入力した値は、
二度と入力しない。参照する。

まとめ

今回は、クエリにリレーションが絡んできました。

しかし、慌てることはありません。

確実に設定をすることで、便利になります。

サンプルファイルで、遊んでみてください。

サンプルファイルはNo31です。

 

スポンサーリンク

Twitterでフォローしよう

おすすめの記事