• 締切済み

リレーションシップの書き方について

今更ながら、リレーションシップの 記述について、悩んでいます。 例を上げると、まず「受注」というテーブルが あるとします。 この受注というデータは、あるタイミングで 「売上」というデータを作成するための元ネタになります。 以降、受注と売上を同時に見に行くようなことはないと 仮定した場合、「受注」と「売上」にはリレーションを 記述する必要はないのでしょうか? 自分としては、「売上」の元データであるだけの「受注」と 売上は関連がないと思うのでリレーションは必要ないと思うのですが・・・

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

運用上、売上は受注にもとづくものなので、必ず ひもづけて管理した方がよいでしょう。 売上を立てたものにたいして、クライアントから 「そんなものを発注した記憶がない」とされた場合 「こういう受注に基づいた売上です」と答えられますから。 あと在庫がたりないときとかは一度で売上があがらない ケースもあるでしょう。 その際、発注に対して売上をひもづけておけば、 ある10本の受注にたいして9本売上がたっていると 1本追加して売りあげる必要があるという指標が 残ります。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>受注と売上を同時に見に行くようなことはないと仮定した場合「受注」と「売上」にはリレーションを記述する必要はないのでしょうか? 通常は[受注]=[売上]と捉えるのではないでしょうか。 受注テーブルと売上テーブルが別々にあり売上データを作成時にしか受注テーブルを参照しないで後はまったく使用しないとすれば要らないと思います。 しかし例えば売上残の抽出は?未売上の受注データを抽出する際はどのようにするのかとか・・。受注テーブルのキーと売上テーブルのキー(受注キーがあればそのキー)で結合させれば簡単に抽出できるのでは。 売上データ作成時に受注レコードに売上済みのフラグを立てればそのフラグを参照すればすぐできますが無い場合は受注テーブルと売上テーブルをキーで結合させる必要があるのではないでしょうか。 などなど 処理の内容により変わっては来ますが。 その辺はどうでしょうか。

noname#19197
noname#19197
回答No.1

私の意見ですが、 受注が、売上の元ネタになったということで、関係は成立します。 なので、リレーションはあると思います。 また、リレーションが必要かどうかは、アプリケーションによって変わってくると思います。 どの受注からの売上なのか知る必要があるならリレーションは必要ですし、 全く別物として扱うのならなくてもいいと思います。

関連するQ&A

  • リレーションシップが作成できなくなりました

    Accessにて、受注管理システムを構築しているのですが 何かの拍子で、リレーションシップが壊れてしまい 再度設定しようとしても 「このリレーションシップを作成して、参照整合性を設定できません」と表示されできません。 テーブルは3つあり、以下の通りになっています。 ・顧客管理テーブル(顧客IDと氏名・住所など) ・売上情報テーブル(受注IDと、顧客IDなどの情報) ・売上明細テーブル(明細IDと、受注IDなどの情報) 問題の箇所は、売上情報テーブルと売上明細テーブルで 売上情報テーブルの「受注ID」と売上明細テーブルの「受注ID」 を結びつけようとすると、上記のメッセージが出てきてしまいます。 一通り、主キーの設定や空白行などはチェックしてみましたが やはり解決しませんでした。 一度壊れてしまったリレーションシップは修復不可能なのでしょうか・・・ どなたか、お知恵を拝借願います。

  • 正規化・リレーションシップについて

    テーブル(表)というのは、売り上げ伝票とうをデータに起こしたものだと思っております。 その中で、起票したテーブルを 部分的・推移的関数を排除すれば第三正規化までが出来ると考えております。 「質問1」 つまり正規化で対象となる表は、起票したデータ(表=伝票等)が対象になる? で間違い無いでしょうか? 「質問2」 1つのデータ(表=伝票等)を、正規化したため、 その関連付けるために、リレーションシップというのがあるのでしょうか?

  • ACCESSのリレーションシップについての疑問

    ACCESS初心者です。 ACCESS2002 OSはWindowsXP SP2です。 基本が分かっていないせいなのかもしれませんが、私には理解できない現象が起こっています。対応方法があれば教えていただくようお願いします。 ACCESSでデータ更新のフォームを作っています。 そのフォームは2・3日前に作ったもので、たとえばテーブルAを更新するためにマスターテーブルのBとCを参照しているような形になっています。このリレーションはクエリで指定してあります。 このフォームではクエリに対して更新する形になっています。 このフォームのデザインを編集しているときに「ツール」の「リレーションシップ」をクリックすると画面にはBとCだけが表示されます。 なぜメインのテーブルのAが表示されないのか?と思いながら、しょうがないので右クリックして「すべてのリレーションシップの表示」を押すと、驚いたことにDのテーブルが表示されました。 実はこのDというテーブルは以前に作ったAを作る前に使っていたAによく似たテーブルなのです。 当然、以前にはDとB・Cのリレーションも作っていましたが、今編集中のフォームではDは関係ありません。 リレーションシップの画面は不必要に広大なもので横に3スクロール分と縦にも5スクロール分くらいあって、その右下の端っこにD・B・Cのリレーションだけが表示されていて、それ以外はただただスペースがあるだけです。 なぜ肝心のA・B・Cのリレーションが表示されずD・B・Cのリレーションが表示されるのでしょう? 試しに今では不要であるDのテーブルを削除してみましたがリレーションシップではさすがにDは消えたもののB・Cが表示されるだけで、Aは出てきません。 そもそもACCESSにおけるリレーションシップというのは個々のフォーム内で定義されるものではないのですね?(根本的なことで申し訳ないのですが、買った2冊の本を見てもインターネットで探してもその辺の説明が見当たりませんでした) SQLであれば個々のSQL文で都度JOIN等の記述をすると思うのですが、ACCESSではデータベース全体の共通事項(?)としての定義になるのでしょうか? ACCESSは初心者で見当はずれな質問かもしれませんがどうかよろしくお願いします。

  • リレーションシップを組むメリットはなんでしょう?

    リレーションシップを組む必要が感じられません。 ・重複データの確認、 ・テーブルにデータがあるかの確認 をVBAで行なってデータを追加しているのですが この場合リレーションシップを組む必要はありますか?

  • このリレーションシップを作成して、参照整合性を設定

     Access2007で、このリレーションシップを作成して、参照整合性を設定できません。   手っ取り早いので、問題にAccessデータが以下のURLからとれるようにしました。  http://homepage3.nifty.com/mtaiyo/sanseyou.accdb  以上Accessのsanseyou.accdbファイルを元にして、 以下の設定項目を実行してください。    テーブル「T得意先マスター」とテーブル「T売上げデータ」の間にリレーションシップを設定します。    「T得意先マスター」の「得意先CD」を「T売上データ」の「得意先CD」までドラッグします。  ≪参照整合性≫のにチェック マーク記号を入れます。 ≪作成≫をクリックする。・・と以下のエラー表示がでて先に進みません。 「 ’T売り上げデータテーブルのデータが参照整合性の規則に違反しています。  たとえば、ある社員に関する売るレコードがリネーション テーブルにあるときに、この社員に関する レコードが主テーブルにありません。    リレーション テーブルのすべてのレコードのデータについていて、関連するレコードが主テーブルにあるようにしてください。  参照整合性の規則に従わないでリレーションシップを作成するときは、[参照整合性]チェックボックスを オフにしてください。」  FOM出版 SETP1 「リレーションシップを設定する」  の項目の、別な設定でも、同じエラーがでたので、最初からエクセルを再イポートしたら無くなりました。   次の設定にかかったところ又でたので、そもそもどこをどうすれば回避できますか!?  以上宜しくお願いいたします。  

  • リレーションシップの設定について

    リレーションシップの設定について Access2002にて受注管理を行っており テーブル、フィールドが次のように存在しています。 <T_納入先>  顧客ID  納入先コード  住所等情報... <T_顧客>  顧客ID  住所等情報... <T_売上情報>  受注ID  顧客ID  売上日やその他情報... <T_売上明細>  受注ID  明細や金額等... ---------- <T_顧客>に登録した顧客は複数の納入先を持つため [<T_顧客>の顧客ID 対 <T_納入先>の顧客ID]を[1 対 多]にてリレーションシップを作成しています。 <T_売上情報>の顧客IDと、<T_顧客>の顧客IDを[1 対 1]にて リレーションシップを作成しています。 ---------- ここで売上情報を登録するために「売上入力フォーム」なるものを作成し、 顧客IDや納入先の指定、売上日の記録や売り上げた明細を登録したいのですが 明細の入力部分は、サブフォームを作成し、<T_売上情報>と<T_売上明細>のクエリで問題ないのですが このフォーム自体のレコードソースとして使用するために <T_納入先><T_顧客><T_売上情報>の3つのテーブルの情報を含んだクエリを 作成したのですが、クエリ作成後、実行してもレコードが一切表示されません。 (おそらく<T_顧客>の中にさらに納入先が複数ある部分が うまくリレーションシップできていなくて矛盾を起こしているのでは・・と思ったのですが。) もちろん<T_納入先>と<T_顧客>のみであれば問題なくクエリは実行し、レコードも表示されます。 ある一つの顧客情報内にも複数の情報(=納入先)がある場合、 リレーションシップの設定はどのようにすればよいでしょうか。 長々とありますが、お分かりのかた是非とも教えて下さい。 よろしくお願いいたします。

  • Accessのリレーションシップ

    Access初心者です。 Access2010でデータベースを作っていて、行き詰ってしまいました。 テーブル1にフィールドABCDEFがあって、Aに主キーが付いています。(Aはテキスト型でフィールドサイズ10です。) テーブル2にはフィールドAGHがあり、Aに主キーが付いてます。(Aはテーブル1と同じです。) テーブル3にも同じくフィールドAIJがあり、Aに主キーが付いています。(Aはテーブル1と同じです。) テーブル1のフィールドAを主テーブルとし、テーブル2・3のフィールドAにリレーションを組んでいます。 この時のリレーションシップで参照整合性と連鎖更新と連鎖削除にチェックを入れ、種類が一対一になりました。 その後、テーブル1でレコードを追加しようとすると、「テーブル'2'にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更を行うことができません。」と出ます。 これを解決する方法はどうするのか、お教えお願いします。 分かりにくい説明ですいません。

  • ファイルメーカー8.0v1 リレーションシップ追加時のメッセージ

    お世話になります。 ファイルメーカー(FileMaker)8.0v1を使用しています。 データベースの定義から、リレーションシップを選択し、 新しいリレーションを追加しようとすると、 「グラフ内の2つのテーブルの間に複数のリレーショナルパスを指定することはできません。どちらかのテーブルを別の名前でグラフに追加する必要があります。」 と、表示されます。 これはどういうことなのでしょうか? このまま組むと、リレーションシップ上に名前が変わって作成されてしまいます。 テーブル自体が複数作成されているわけではないことは解りますが、 リレーションシップが見づらいです。 現在、1つのテーブルから、 複数のリレーショナルを組んでいるテーブルもあるのですが、 それはなぜ大丈夫なんでしょうか? よろしくお願いします。

  • Accessリレーションシップについて

    お世話になります。 Access2010 普段はクエリにて、いくつかのテーブルやクエリを紐づけているのですが リレーションシップの設定は今までやったことがありません。 ネットで調べて、 ・「参照整合性」にチェックを入れることにより、1対多の多側で1側に存在  しないIDで登録しようとするとエラーになる。   →間違ったデータが入力されるのを防ぐ。 ・多側でリレーションシップが設定されているフィールドに値を入力しない  ことは可能。但し、当該フィールドの「値要求」プロパティを"はい"に  した場合は、入力しないとエラーになる。 ・「フィールドの連鎖更新」にチェックを入れると、1側で変更したものが  多側でも自動的に変更される。 ・「レコードの連鎖削除」にチェックを入れると、1側で削除した場合、  多側で該当するデータをもつレコードが自動的に削除される。 上記については実際に試してみて動きを確認しました。 ※上記の認識違いや、もっと大事なことがあればご指摘、ご教示頂けると  幸いです。 今までは、こっちのテーブルで削除したらこっちのテーブルでも削除 みたいなことをやってたので、便利だとは思うのですが。。 以下のテーブルでリレーションシップの設定を行ったとします。 売上テーブル  ID 商品 担当者コード  1 AAAAA  3  2 BBBBB  1  3 AAAAA  1  4 CCCCC  2  5 CCCCC  3 担当者テーブル 担当者コード 担当者名  1     担当者A  2     担当者B  3     担当者C 売上テーブルの担当者コードと、担当者テーブルの 担当者コードでリレーションの設定を行い、「参照整合性」及び 「レコードの連鎖削除」にチェックを入れたとします。 例えばフォーム上にリストボックスを設置し ID 商品 担当者名 を表示し、リストボックス上で選択されたレコードを、削除ボタンを 押したら、そのレコードが削除されるプログラムを作成します。 ※選択されたレコードのIDを取得し削除クエリで削除。 リストボックスでID:5のレコードを選択し、削除ボタンを押した場合 売上テーブルのID:5のレコードを削除しても、担当者テーブルから 担当者コード:3のレコードは削除されない・・という認識でよろしい でしょうか。 ※要するに、1対多の多側で削除されても1側には影響無し。 同様にリストボックスでID:5のレコードを選択し、削除ボタンを押したときに 担当者コード:3を取得し、まずは担当者テーブルで担当者コード:3の レコードを削除すると、併せて売上テーブルのID:1及びID:5が削除 される。 要するに、上記のケースで「レコードの連鎖削除」の設定を行うと 本来削除すべきID:5以外のレコード(ID:1)まで削除されてしまう ことになる?? ※そもそも例がちょっと悪かったかもしれません。。 何が言いたいかというと、「フィールドの連鎖更新」「レコードの 連鎖削除」は、よーく考えて設定しないと意図しないところまで 更新されたり削除されてしまうのかなと。。なので、設定することに よって、プログラムの作りも変わってきてしまうことになるので しょうか。 理解不足で質問自体もモヤモヤしたものになってしまいましたが、 ご教示のほど、宜しくお願い致します。

  • access2003について

    質問1   テーブルで住所入力支援の設定をする。テーブルのデータシートビューで郵便番号を入力すると、都道府県や市区郡が自動で表示され、ちゃんと機能する。しかし、フォームで郵便番号を入力するとテーブルの郵便番号には数値が記載されるが、都道府県や市区郡など表示されないのは何故でしょうか。 質問2  テーブルのフィールドの一つを消したいのですが、「このフィールドにはリレーションシップが設定されています。このフィールドを削除するには、リレーションショップ ウィンドウで関連するリレーションシップを削除する必要があります。」と案内がでて削除できません。しかし、リレーションショップ ウィンドウで関連するリレーションを全部削除し、いまではリレーションらしいものはありません。どうすれば上記フィールドを消せるでしょうか・・・・ 皆様、お知恵をお貸しください!