- ベストアンサー
リレーションの設定って意味あるのですか?
すみません、素朴な疑問です! リレーションってプログラミング上どんな意味(利点)があるのでしょうか? たとえば、下記のようにテーブル2つあり、PC種別コードで1:多で リレーションが設定されていたとします。 ■顧客テーブル ■PCテーブル 氏名 PC種別コード PC種別コード PC種別名 ======== ============ 田中 1 1 デスクトップ 佐藤 2 2 ノートブック 伊藤 2 下記のようにフォーム上で表示する時、 氏名 所有PC種別名 ========== 田中 デスクトップ 佐藤 ノートブック 伊藤 ノートブック 所有PC種別名は、リレーションの設定とはまったく無関係に プログラミングで引っ張ってきませんか? たとえば、PC種別コードをキーにDlookup関数を使ったりして。 あれ?SQLのSelect文で記述すれば勝手にキーを判断し結合して持ってきてくれるのですかね~? まったくの基本中の基本の質問をして申し訳ありません。 どなたかこの素朴な疑問を解決してください。 よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>リレーションってプログラミング上どんな意味(利点)があるのでしょうか? 事プログラミングに関しては、リレーションを設定していなくてもすべての事が問題なく出来ます。 開発の途中などは、リレーションの為に テストデータの作成や削除等ちょっとした操作に影響するので まったく設定せずに行うこともあります。 プログラミング上と言うよりも、データベースの管理上データを矛盾無く管理するのに役だちます。 テーブル間の関連付けにより、 ・矛盾したデータの入り込みを防げる ・関連した項目の連鎖更新によりデータの整合性を保てる ・関連した項目によりレコードの連鎖削除ができデータの整合性を保てる プログラミングと言う表現とはずれますが、クエリの作成画面でリレーションを設定しているテーブルを複数配置した場合 設定している結合の情報が静的に設定されます。
その他の回答 (4)
- nda23
- ベストアンサー率54% (777/1415)
既に何人かの方が回答しているので、簡潔に述べます。 (1)自動設計 クエリビルダなどが自動的にテーブル結合を行ったりしてくれます。 (2)誤りを防ぐ 例えば、社員コードと勤務時間などのデータがあったとします。社員マスタと、 社員コードがリレーションを構成していれば、マスタに存在しない社員コードは 登録できないし、データでコードが使われている間はマスタから該当レコードを 削除できません。 (3)処理速度が速い 上記例で言うと、社員マスタからデータテーブルを結合し、社員コードで検索すると、 結合しないで検索した時よりも高速に処理できます。もっとも、最近ではマシンが速く、 DBエンジンも利口になったので、恩恵は感じなくなりましたが、20年くらい前のシステムでは 両者の間には格段の差があり、リレーションの設計が重要なポイントを占め、処理手順でも リレーションを強く意識していないと、実用に耐えるモノが作れないという時代がありました。
お礼
なるほど。 分かり易くまとめていただいて感謝です。 ありがとうございました。
- jjon-com
- ベストアンサー率61% (1599/2592)
>連鎖更新。リレーションで結ばれているデータ内容がすべて >ひも付いて変更されるという利点もあるということですか? そのとおりです。 >しかし、リレーションをたどって表示する場合には効果なく しかし,という言葉で係り受けしているので「リレーションで結ばれている」と「リレーションをたどって」を対比しているのでしょうが,両者がどう違うと考えておいでなのか分かりませんでした。 もしかして後者で言いたいことは,両テーブルの間にリレーションはないがwhere句で任意属性値を連結したもの,ということですか? 例えば次のように。 select 氏名, PC種別名 from 顧客テーブル, PCテーブル where 顧客テーブル.PC種別コード = PCテーブル.PC種別コード; >勝手にSQL文でキーをたどって所有PC種別名を引っ張ってこれない場合 これも具体的にどういうデータ例の状況を指しているのか分かりませんでした。
- jjon-com
- ベストアンサー率61% (1599/2592)
>リレーションってプログラミング上どんな意味(利点)がある? というご質問ですから,ANo.1のようなポイントは後回しにすべきでした。 いの一番に述べるべき意味(利点)は,リレーション設定によって【多】側の顧客テーブルから【1】側のPCテーブルに対する参照制約が生まれるということです。 顧客テーブルに「尾名吉 3」のような行を追加するとき,リレーションにしたがってPCテーブルの主キーとの整合性検査が自動的におこなわれ,存在しない値であればそのSQL文の実行はエラーとして返ります。プログラミングで値の検査をする必要はないということです。
補足
なるほど。ということは、整合性のチェックには役だっているということですね。 書き忘れましたが、Access2003を使っていますが、リレーションの連鎖更新とかありますが、これを設定するとリレーションで結ばれているデータ内容がすべてひも付いて変更されるという利点もあるということですか? しかし、リレーションをたどって表示する場合には効果なくそれなりの記述をしなければいけないということですね? ちなみに、勝手にSQL文でキーをたどって所有PC種別名を引っ張ってこれない場合には、どう記述すればいいのでしょうか?
- jjon-com
- ベストアンサー率61% (1599/2592)
勝手にキーを判断し結合して持ってきてくれる自然結合構文が使えるDBなら,次のSQL文でいけます。 select 氏名, PC種別名 from 顧客テーブル natural join PCテーブル;
お礼
なるほど。 分かり易くまとめていただいて感謝です。 ありがとうございました。