さて、今回はリレーションシップの設定です。
データベースのフィールドとフィールドをリレーションシップで繋げます。この講座ではステップbyステップで簡単に進めることができます。
是非、ご参考に!
関連講座
- Access データベースの正規化 講座 Vol.1
- Access データ型の決定とフィールドの構築 講座 Vol.2
- Access ルックアップウィザード 講座 Vol.3
- Access リレーションシップ 講座 Vol.4 ← ココ
- Access クエリ作成 講座 Vol.5
- Access 関数の使い方 講座 Vol.6
1.Access リレーションシップ の設定方法
リレーションシップは以下のように設定します。
上部メニューから<リレーションシップ>を選択します。
リレーションでつなげたいテーブルを表示させます。リレーションシップを初めて作成すると、テーブル一覧が表示されるので、そちらから任意のものを選択してもOKです。
下記のように、左側のテーブル一覧から、ドラック&ドロップでテーブルを追加することも可能です。
共通するフィールドを、ドラック&ドロップでつなげます。
M_商品区分の<商品区分コード>をつかみ、M_商品の<商品区分コード>の上でドロップしてください。
参照整合性を適用画面では、以下の項目全てにチェック入れます。これは、参照整合性にチェック入れることで、矛盾するデータの入力を防ぐことができます。例えば、M_商品区分のテーブルに存在しない項目は、M_商品で入力することはできません。
<連鎖更新><連鎖削除>も同様に、M商品区分の項目が消されると、同様に関連する項目が削除されます。データベースは矛盾するデータを極力省くことで、データの整合性を保つ必要があるわけです。
また、リレーションシップの種類を確認してください。
原則<1対多>または<多対1>の関係になっている必要があります。もちろん例外もありますが、この原則は極力成立するようにデータベースを構築しましょう。もし、<多対多>や<1対1>いれば、それはデータベースの構築がおかしいということになります。
再度、データベースの構築から見直してみましょう!
リレーションシップが完成すれば、上記のような感じになります。ここでは<1側>となっているほうが「親」、<多側>になっているほうが「子」の関係になります。
データを削除する場合、「子」の側から先にデータを削除する必要があります。
2.リレーションシップの削除
一度張ったリレーションシップを削除する場合は、細い線をクリックした後、右クリックから削除します。または、細い線をクリックした後、<Delキー>でも削除することができます。リレーションの線を複数削除する必要がある場合は、一つ一つ選択して削除していきましょう。
(まとめて削除する方法はありません)
3.サロゲートキー
まず、<M_仕入先>と<M_仕入先担当者>のテーブルの構成を説明します。<M_仕入先>には、仕入先の会社情報と担当者の情報があります。しかし、私は担当者の詳しい詳細は、別テーブルに分けることにしました。何故なら、<M_仕入先>に担当者の連絡先やメールアドレスの詳細情報があると、テーブルが見にくくなるからです。
ここで一度整理しておくと・・・・、
- 一つの仕入先の会社には、必ず一人の担当者がいる。(<M_仕入先>の担当者コードは一意となる)
- 担当者は変わる可能性がある。(<M_仕入先担当者>の担当者コードは重複する)
- データベースの理念に従い、過去の情報は出来る限り残しておく。(古い担当者情報はそのまま)
とはいえ、<M_仕入先担当者>テーブルには主キーが必要となる・・・。担当者コードは重複するため、主キーにはできない。複合キーも使用できそうな気がするが、気持ち的に使いたくない。そこで、管理用の主キー<サロゲートキー>を使用することにした。
当然このサロゲートキーは何ら使い道のない主キーとなる。
最終的には、以下のようなテーブル構造になった。
4.リレーションシップで未定義になる場合
さて、担当者コードの問題も解決できたので、次はリレーションシップを設定するだけ。しかし、ここでさらに問題が発生!<リレーションシップが適用できない>のである・・・・。上記の画像で、リレーションシップの種類が<未定義>となっている。
これではリレーションシップが設定できない。
未定義の解決方法
これは、<M_仕入先>の担当者コードのインデックス設定が<未定義>になっているためである。
インデックスを<はい(重複なし)>に設定することで解決する。
これで無事にリレーションシップが設定できました!