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