この人頭いいなと思ったエピソード

Accessで販売管理をしています。
以下のテーブルを作成し(*は主キーです)、

[売上T]  [商品M]  [顧客M]  [受注T]
*売上NO  *商品ID  *顧客ID1  *受注NO
商品ID   商品名    *顧客ID2  商品ID
日付    顧客ID1     顧客名    受注日
金額    顧客ID2            受注金額
       受注先1
       受注先2

参照整合性にチェックを入れリレーションでつないでいます。
リレーションシップは下記のとおりです。

[売上T]商品ID―[商品M]商品ID―[受注T]商品ID
[商品M]顧客ID1及び2―[顧客M]顧客ID1及び2―[商品M]受注先1及び2

ここで顧客と受注先が重複することもあるので、顧客Mから顧客ID及び受注先IDの2つのテーブルにリレーションシップを設定しているのですが、
クエリで  [受注T]受注NO及び受注金額、[顧客M]顧客名で抽出したところ、
5000件以上[受注T]にデータがあるはずのものが、1200件ほどしか抽出できませんでした。

ちなみに[顧客M]と[受注用顧客M]というまったく別のテーブルを作成し、
[商品M]受注先1及び2―[受注用顧客M]顧客ID1及び2
とリレーションを作成し、クエリで抽出するとうまくいきました。
しかしこの方法だと、[顧客M]と[受注用顧客M]という2つのテーブルを管理しなければならなくなるので面倒です。


そこで質問です。
同じテーブルの2つの項目対他のテーブルの1つの項目とでは、うまくリレーションが設定できないのでしょうか。

もし出来ない場合、[顧客M]と[受注用顧客M]の2つのテーブルを管理しなければならない訳ですが、
なんとか簡単に管理できる方法(ひとつのテーブルを変更すると簡単にもうひとつが変更できる設定)はないでしょうか。

非常にわかりにくく長い文章で申し訳ありません。
VBA等はさっぱりわかりませんので、普通の設定の範囲内で、できるかどうかよろしくお願いします。

A 回答 (3件)

リレーションシップとクエリでの結合を混同していますね



>ちなみに[顧客M]と[受注用顧客M]というまったく別のテーブルを作成し
>[商品M]受注先1及び2―[受注用顧客M]顧客ID1及び2
>とリレーションを作成し、クエリで抽出するとうまくいきました。
クエリでこのように結合すればいいだけですから、[受注用顧客M]など作らず
クエリデザインビューに顧客Mを2度ドロップすればいいのです
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>リレーションシップとクエリでの結合を混同していますね
どうやらそのようだったようです。

仰る方法で試してみたのですが、
デザインビューで作るとなぜか顧客名だけちがいその他は同じようなデータが重複し、
うまく作れなかったので、ウィザードから作成し、SQLビューで
(顧客M.顧客ID1=装置M.顧客ID1)を(顧客M.顧客ID1=装置M.受注先1)に直すとうまく受注先を抽出することが出来ました。

なぜデザインビューでうまく結合できないのか、疑問は残りますが。

お礼日時:2007/09/21 15:07

訂正:


×受売上金額______通貨型
○売上金額______通貨型
    • good
    • 0

1、各テーブルの主キーは[ID]、[XXNO]で統一。


2、連結列は、[テーブル名_主キー列名]で統一。

<商品M>
ID___________長整数
商品名_____テキスト型

<顧客M>
ID___________長整数
顧客名_____テキスト型

<受注T>
受注NO____長整数
受注日_____日付/時刻型
顧客M_ID__長整数
商品M_ID__長整数
受注金額__通貨型

<売上T>
売上NO___________長整数
売上日____________日付/時刻型
受注T_受注NO__長整数
受売上金額______通貨型

実際にデータを登録してみます。

<商品M>
ID___商品名
1____A商品
2____B商品

<顧客M>
ID___顧客名
1____鈴木 一郎
2____中村 主水

<受注T>
受注NO___受注日_________顧客M_ID____商品M_ID___受注金額
101________2007/09/10___鈴木 一郎___A商品_______\2,000
102________2007/09/11___中村 主水___B商品_______\3,000

<売上T>
売上NO___売上日_________受注T_受注NO___売上金額
101________2007/09/18___101_________________\2,000
102________2007/09/19___102_________________\3,000

これじゃ、誰に何を売上げたのか判りませんので、<売上_クエリ>を作成してみます。

売上NO___売上日_________顧客名________商品名___売上金額___受注NO
101________2007/09/18___鈴木 一郎___A商品_____\2,000______101
102________2007/09/19___中村 主水___B商品_____\3,000______102

問題は、<受注T>=<売上T>という設計にするか否かでしょう。
・<受注T>参照方式として開発できるか否か?
・<受注T>非参照方式とし<受注T>の存在を必須としない方が利便性が高いか否か?

<売上T>
売上NO___________長整数
売上日____________日付/時刻型
顧客M_ID__長整数
商品M_ID__長整数
受売上金額______通貨型

と、このように、マスターはマスター、入力テーブルは入力テーブルとテーブルを明瞭に分ければ・・・。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
とてもわかりやすく書いてくださりありがとうございました。
この方法は手間はかかりますが、わかりやすく間違えることはないですね。
まだテーブルの正規化等わかっていないのでどの方法がいいのかわかりませんが、よく理解して検討したいと思います。

お礼日時:2007/09/21 15:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報