
すみません、素朴な疑問です!
リレーションってプログラミング上どんな意味(利点)があるのでしょうか?
たとえば、下記のようにテーブル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ランキング
-
データベースファイル(.db)を開...
-
CSVファイルでテキストの改行の...
-
エクセルのフィルタ抽出が固まる
-
ACCESSのSQLで、NULLかNULLでな...
-
警察はスマホに保存した動画や...
-
Accessを開きなおすとテキスト...
-
sql update で 抽出条件データ...
-
accsessで顧客コードで氏名を呼...
-
将棋のDB。「この局面と同一の...
-
帳票フォームでのあるコンボボ...
-
顧客データベースを作る場合、...
-
最新の日付とその金額をクエリ...
-
情報整理するのに、「 Fullfree...
-
データベースの勉強 公務員を目...
-
はじめてのAccess 2019 について
-
ドリームメーカーってどうやっ...
-
Accessのフォームへ、記録者の...
-
android版のMs accessはありま...
-
テキストボックスにコントロー...
-
構文エラー:演算子がありませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
将棋のDB。「この局面と同一の...
-
ACCESSのSQLで、NULLかNULLでな...
-
CSVファイルでテキストの改行の...
-
最新の日付とその金額をクエリ...
-
エクセルのフィルタ抽出が固まる
-
警察はスマホに保存した動画や...
-
Accessを開きなおすとテキスト...
-
顧客データベースを作る場合、...
-
シートが異なるセル同士を、相...
-
テキストボックスにコントロー...
-
DBエラーを解決したい
-
マイクロソフトAccessでsqlのas...
-
帳票フォームでのあるコンボボ...
-
Access クエリ上で表示させた割...
-
DocuWorksでの印刷
-
Excelフィルタ抽出で「検索して...
-
DB2のSELECTでカンマ編集につい...
-
android版のMs accessはありま...
-
20万行あるデータを動かしたい
おすすめ情報