
すみません、素朴な疑問です!
リレーションってプログラミング上どんな意味(利点)があるのでしょうか?
たとえば、下記のようにテーブル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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- モニター・ディスプレイ PCとプレステで、モニターの表示を切り替えたい 1 2022/05/11 23:55
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- その他(パソコン・周辺機器) 2つのPCを行き来する 2 2022/06/15 01:59
- その他(ブラウザ) 新たなPCを入れた場合のブラウザーの諸設定の引継ぎについて。 4 2022/05/29 16:05
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(パソコン・周辺機器) 同じソフトを共有する 1 2022/06/17 19:08
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルメーカで、こういう検...
-
ファイルメーカーの再帰定義/リ...
-
Filemaker5のリレーションにつ...
-
アクセスのクエリが勝手に変更...
-
ファイルメーカーPro.でデ...
-
複数の商品を購入している方の...
-
「#エラー」の回避
-
差込印刷で顧客別に複数行のデ...
-
accessのフィールドに10桁の数...
-
Accessのクエリーのゼロデータ...
-
ExcelからAccessデータを検索す...
-
Accessのレポート上のテキスト...
-
レポートのラベルなどの非表示...
-
FileMakerで特定フィールドを空...
-
ファイルメーカー印刷時の改ページ
-
Accessのレポートの集計に条件...
-
ファイルメーカーPro5で在庫の...
-
ファイルメーカーの重複レコード
-
差し込み文書のルールで if the...
-
WORD差し込み印刷:日付の処理 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスのクエリが勝手に変更...
-
リレーションの設定って意味あ...
-
FileMakerのスクリプト
-
FileMakerで繰り返しフィールド...
-
filemaker 7 「関連レコードへ...
-
リレーションシップで一対多と...
-
ファイルメーカーproに関して詳...
-
filemakerでの繰り返しフィール...
-
ファイルメーカーの操作方法に...
-
こういうことは可能ですか?(F...
-
ファイルメーカーの再帰定義/リ...
-
FileMaker pro 11 リレーション本
-
ポータルの意味が理解できません
-
FileMakerで指定日から5日以内...
-
Accessのリレーション解除した...
-
FileMakerで「タグクラウド」の...
-
ファイルメーカー5.5で売掛帳を...
-
ファイルメーカーProの集計
-
ファイルメーカーpro6、繰り返...
-
ファイルメーカー合計について
おすすめ情報