- ベストアンサー
Accessテーブル設計とクエリ
- Access初心者が注文実績管理表の作成に困っています。テーブルの設計が間違っている可能性もあります。どうすれば関連付けや集計ができるでしょうか?
- 質問内容は、商品の入力を簡略化したい、注文書のデーター格納について、発注実績の抽出方法、リレーションの状態、商品テーブルのドリルボタンのメッセージについてです。
- 具体的な現状として、顧客テーブル、商品テーブル、注文テーブル、注文明細テーブルがあり、それぞれの関連やデーターの集計方法がわかりません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
一般的には、 【A】顧客テーブル 主キー(1)顧客ID(オートナンバー・・・長整数型) (2)氏名(テキスト型) ※同一顧客で複数の発注を受けたら同じ顧客IDを使うように考えます。 (発注コードは入れるべきでない) 【B】商品テーブル 主キー(1)商品ID(オートナンバー・・・長整数型) (2)品名(テキスト型) (3)単価(通貨型)・・・定価があるなら設ける。 ※同一商品で複数の発注を受けたら同じ商品IDを使うように考えます。 (注文番号は入れるべきでない) 【C】注文テーブル 主キー(1)注文ID(オートナンバー・・・長整数型) (2)日付 (3)発注コード(テキスト型) ※発注コードは『英数字』のためテキスト型。リンク元も『テキスト型』 (4)顧客ID・・・顧客との紐付けはこの項目で行う。 【D】注文明細テーブル(注文番号は全て4ケタの数字です。重複Noはありません) 主キー(1)注文明細ID(オートナンバー型・・・長整数型) (2)注文ID(長整数型) または (1)注文ID(長整数型) (2)枝番・・・1から連番 主キーは(1)と(2)のセット (3)注文番号(数値型・・・長整数型) (4)商品ID (5)数量(注文番号1) (6)単価(通貨型)・・・商品マスタの単価はいつでも同じではないので、注文と一致しないことあり。 金額は、数量×単価で求めるか、別途(7)金額を設けるか。 (金額設定の仕方によりけりで、3本1000円とかがあるなら、(7)金額も必要。) 注文明細テーブルは、「ひとり最大50個の商品を一枚の注文書で発注します」に対応して、 1枚の注文書で、最大50レコード作ります。 リレーション 【A】(1)-【C】(4) 【B】(1)-【D】(4) 【C】(1)-【D】(1)か(2) というふうにしますが。 (まずは、何でこういう設計にするのか、現状との違いから話をしていったほうが いいのかなと思います。 ⇒現状のほうがいいというのなら、それで話を進めてもいいのですが、 後の実績抽出は処理が面倒になると思っておいてください。)
お礼
大変ご丁寧な回答をありがとうございました。誰でも発注業務をできるように、発注コードと注文番号で発注書を起こせるようにエクセルで、ベースを設計しました。 また将来的には発注カテゴリー(発注書の種別)は3つあります。四ケタの数字で1000~1999まではAという注文書。2000~2999はBという注文書。それいがいの数字3000~9999まではCという注文書に自動的に情報が流れるよう、アクセスで設計したいと考えております。 良い形にしたいのでまずは、実績処理の仕組みをご教授いただけると助かります。大きなフレームで考えて次につなげていきたいと思います。
補足
さっそくのご回答ありがとうございます。 通常のテーブルの設計方法について大変参考になりました。ありがとうございます。 なぜ、今回このような設計にしたのかを補足したいと思います。 ■顧客テーブルに発注コードを入れていた理由の説明 ベースにしてたのはエクセルの発注書です。顧客は固定なので、発注業務を迅速におこなう為に「英数字」の会員番号をVLOOKUP関数を使い名前と商品の手配方法を、別のシートから参照させていました。※現時点での顧客というのは、当社の社員になります。所属グループが複数あり既存のコードを使わないと運用ができない母体があったため、『A101』とか『B101』という会員番号を使わざる得ない理由になっています。 ■商品テーブルと注文テーブルと注文番号をいれていた理由 これも同じくエクセルの商品テーブルに、4ケタの発注番号を重複しないように設けて、 別の注文書に数字を入力するだけで、商品名と商品名詳細が表示されるようVLOOKUP関数で参照するために設定していました。 まずは回答者様のやりかたを実直に行い、アクセスの理解を深め、考察しようと思います。 できれば、今のエクセルのデーターをインポートするだけで実績処理できるような形をイメージしていましたので、そのような方法ができるのであれば、ご教授くださると大変ありがたいです。