- ベストアンサー
アクセス:クエリの結合とリレーションシップの違いについて
アクセス初心者です。 ◆ある請求システムをクエリ上の結合と関数だけでほぼ完成できました。誤作動もなく、正確な結果がでます。いわゆるリレーションシップをしないでの構築です。 ◆構成は、請求対象者の個人IDをキーにして、請求対象日付、基本料、食事料、立替金、その他請求という比較的シンプルななものを結合させて作成しています。クエリ上で関数で日付のところで何月分の請求かを抽出するようなしくみです。 ◆しかるに、完成させてしまってから「リレーションシップ」はしたほうがいいという内容のものをいくつかの資料でたまたま目にするようになりました。 ◆しかるにクエリーでできてしまったシステムで現時点で不具合は全く発生せず、リレーションの必要性が理解できません。 ◆というより、リレーションシップそのものを知らない段階でクエリの結合に取り組んだ者ですから、リレーションシップとは何ぞや?というレベルです。 ◆そこで、今回、クエリの結合とリレーションシップの違いについてアドバイスをいただけないでしょうか? よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
追記ばかりで申し訳ないです。 SQL:Structured Query Language の略。DBを操作する言語。 (詳細はネット検索などで調べてくださいね。) クエリの実態はSQLです。 クエリをSQLビューで開いてみてください。 SELECT ・・・がそうです。 SQLで直接記述をすると、クエリのデザインビューで指定できないことも指定可能になります。 (よく利用するのか、ユニオンクエリかな?)
その他の回答 (7)
- GreatDragon
- ベストアンサー率46% (186/402)
追記しようと思ったら他の方から既に回答出てますね。 リレーションシップウィンドウでの設定はあくまで定義のみです。 クエリなどでその設定が自動的に使用されます。 クエリ上で自分で結合するなら、リレーションシップウインドウでの設定いは無くても構いません。 尚、設計云々はシステムの設計手法なるものがありますが、DBの部分に限っていえば 初期の段階で「テーブルの正規化」が必要でその一連の作業の中でリレーションシップが出てきます。
s_husky です。 全ての学習は、ヘルプ文で事足ります。 私は、一度も、WEBや本で調べた経験がありません ヘルプを参照して下さい。
お礼
何度もありがとうございました。 ヘルプ文だけで勉強なさるs_huskyさんの力量はすばらしいと思います。私もがんばってみます。ご指導、アドバイスありがとうございます。前回のご回答とあわせて感謝申し上げます。
必要なリレーションシップについては、テーブルの設計段階で設定するのが基本中の基本です。 リレーショナルデータベースと言われる理由です。 そういうテーブル設計が先にありきです。 クエリーでもってテーブル間結合を追加できるのは、おまけみたいなものです ですから、おまけのみに頼るのは、一種の邪道です。 土台のテーブル設計をしっかりしておけば、 ・クエリーが複雑怪奇になることはありません。 ・サブフォームを持つフォームの作成も簡単に行えます。 ・SQL文も簡略化します。 ・何よりも、データを効率良く登録できます。 Access の真価は、いかにリレーショナルデータベースとしてテーブルを設計するかにかかっています。 ※Accessのヘルプの冒頭にある「データベースを作成、使用する」を読まれるといいと思います。
補足
ありがとうございます。 なるほど、「邪道」なるものを作ってしまったような気がします^^; 初心者とはいえ、自分で調べるべきないようでしょうが、「SQL文が簡略化できる」ことについてもう少し教えてくださいませんでしょうか?SQLとはどういうものかさえよくわかっていないので・・・ ごめんなさい。よろしくお願いします。
- O_cyan
- ベストアンサー率59% (745/1260)
>クエリの結合とリレーションシップの違い 言葉の違いから言えば リレーションシップ:2つのオブジェクトの関連性。関係。です。テーブルの場合一方のテーブルの列がもう一方のテーブルの列にどのようにリンクされているかを示すことを言います。 結合:2つのテーブルを共通するキーにより関係づけて新しい1つのテーブルのようにする操作です。 >クエリ上で結合するよりもリレーションシップウインドウで定義するほうが間違いないというような相違点があるか どちらでも相違はありません。(結合に間違えが無ければですが) リレーションシップウィンドウで設定しておけばクエリなどでそのテーブルを使うと自動結合してくれる。リレーションシップで設定していなくてもクエリ上で結合すればSQLを発行し実行できる。 予め確定しているリレーションはリレーションシップで設定しておきクエリ(SQL)上でのみ必要ならクエリ上で結合すれば良いという事です。 レコード間の整合性を取るのか取らないのか等やどのように結合するのかなど色々ありますのでその辺は勉強した方が良いと思います。
お礼
ありがとうございます。だいぶわかってきました。クエリ上の結合でも「してはいけない間違い」ではないという点では安心しました。もっと勉強してみます。ありがとうございました。
- mshr1962
- ベストアンサー率39% (7417/18945)
リレーションシップでの連結は既定値だと思ってください。 クエリやコンボボックス・リストボックス等を使う場合、ここの設定が初期値になります。 また、リレーションシップの場合、マスタとデータの連結で マスタを修正・削除すればデータ側も連動して修正・削除されるといった設定も可能です。
補足
ありがとうございます。少しイメージできかけました。「既定値」について、まだすこしニュアンスがつかみかねていますが・・・。 #1さんにも補足をお願いしましたが、クエリ上で結合したものとリレーションシップの定義をすることと連動・修正・削除は別として同じものと考えても差し支えないものでしょうか?それともあくまでリレーションシップ定義をすることが原則的に必要なものでしょうか?もう少し詳細を教えてくだされば幸いです。 よろしくお願いいたします。
- GreatDragon
- ベストアンサー率46% (186/402)
追記です。 リレーションシップについて詳しく知りたい場合は、キーワードを「テーブルの正規化」でネット検索してみてください。 最初は難しいかもしれませんが、DBの本質みたいなもの?が理解できると思います。
お礼
ひきつづき、ありがとございます。早速調べてみます^^
- GreatDragon
- ベストアンサー率46% (186/402)
??? テーブルの結合をリレーションシップと言います。 リレーションシップウインドウで定義したり、クエリ内で複数テーブル結合します。 クエリ内で既に結合していると言うことは、知らないうちにリレーションシップを利用していることになります。
補足
ありがとうございます。 質問の趣旨は、リレーションシップウインドウで定義するものとクエリ内で定義するものとの違いについてです。例えばクエリ上で結合するよりもリレーションシップウインドウで定義するほうが間違いないというような相違点があるかどうか・・・ そのような質問を申し上げたかったのです。
お礼
ご丁寧にご説明してくださり心より感謝します。 初心者(素人)はわからない用語(今回のようなSQL)に出くわすだけで心理的に”しりごみ”してしまいます。 GreatDragonさんのように、優しくご解説くださるとアクセスの本質に踏込みやすくなります。その点、何度も追記してくださったことはうれしく、感謝でした。勉強がんばります。ありがとうございました^^