- ベストアンサー
アクセスリレーションとデータの参照について
- アクセスとエクセルマクロの入門書を読み終えたレベルで、注文実績管理をするためにアクセスの構築をしていますが、困っています。
- 注文テーブルにある「注文番号」と「数量」と「日付」を用いて期間中の発注実績の集計をしたいと考えていますが、関連付けができません。
- 顧客テーブル、商品テーブル、注文テーブルのデータを統合するために、発注コードを使用したリレーションシップの設定をしたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>【A】顧客テーブルは (2)の発注コードが主キー >【C】注文テーブルは、(1)のID(オートナンバー)が主キーです。 これはOKです。ただし、注文テーブルのID は 注文ID というように内容が分かる名前に変更しましょう。 >【B】商品テーブルは、(1)のID(オートナンバー)が主キー これは、ID を主キーにするなら、リンク先も ID(長整数型)にする必要があります。 注文番号をリンク先に格納したいのなら、「注文番号」を主キーにする必要があります。 注文テーブルは、下記のように2つに分割してください。 【C】注文テーブル (1)注文ID(オートナンバー) (2)発注コード (3)日付 (4)氏名 ←この氏名が顧客テーブルの氏名ならば、このフィールドは不必要 担当者とか別の内容のデータならOK、その場合は意味を表すフィールド名に変更したほうがよい。 【D】注文明細テーブル (1)注文明細ID(オートナンバー型) (2)注文ID(長整数型) (3)注文番号 ←商品テーブルの主キーが「注文番号」の場合 (4)数量
その他の回答 (1)
- hatena1989
- ベストアンサー率87% (378/433)
テーブル設計が間違っています。 データペースのテーブル設計にはセオリーがあり、それは「正規化」と言われてます。 とりあえずWEBで「正規化」をキーワードで検索してどのようなものなのか大まかに理解しましょう。 あと、テーブルには、主キーが原則として必須になります。 現状のテーブルの主キーは何になっているのか明確にしてください。 例えば、顧客テーブルの「発注コード」、これは、重複がなく主キーになっていますか。 これでリレーションシップを設定するには主キーにする必要があります。 商品テーブル の「注文番号」、これも主キーになってますか。同じく主キーにしないとリレーションシップは設定出来ません。 注文テーブルは「正規化」できてません。正規化するには、注文テーブル、注文明細テーブル と2つに分ける必要があります。これについては、上記の主キーに設定を聞いてからになりますね。
お礼
ご丁寧な回答をありがとうございました。
補足
早速の回答ありがとうございます。 正規化については、本日、よく調べて理解を深めようと思います。 さて、主キーの設定についてですが、以下の通りになっています。 【A】顧客テーブルは (2)の発注コードが主キー 【B】商品テーブルは、(1)のID(オートナンバー)が主キー 【C】注文テーブルは、(1)のID(オートナンバー)が主キーです。 現在、【A】の顧客テーブルの主キーを設定している発注コードと【C】の注文テーブルの 発注コードをリレーションしています。参照整合性はできていません。 【B】の商品テーブルもリレーションをとり、商品テーブルにある商品番号だけ入力することにより、 商品名と金額を入力しなくてもいいような形にしたいのですが、お手上げです。 色々試しましたが、何に紐づければ良いのか、わかりませんでした。 商品だけで300アイテムもあるので、都度リストを見ながら商品名と金額を入力するのは、膨大な時間を 奪われるのでなんとかしたいと思った次第です。 ちなみに【C】の注文テーブルは、いわゆる発注書で100人が一か月複数回(2~3回)使用しています。 発注書の束のようなイメージです。 回答者様がおっしゃるとおりテーブルの設計が間違っていると思います。 適正な管理をするために、色々長い時間考えておりますが、よい形にならず、相当苦しんでおります。
お礼
ご回答くださいましてありがとうございます。 私の理解が不足しているせいかまだ解決に至っておりません。 下記にて、より具体的な質問を改めて用意いたしました。 アドバイス頂けると幸いです。 http://oshiete.goo.ne.jp/qa/8102190.html