みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

注文した商品名をマスターで作るか

Access 2013 vba
今工事のための材料の注文履歴を保存するテーブルと画面を作っています。

この商品名や、単価、仕入れ値などのデータは、管理テーブルを作成してそこで管理し、そこから商品IDを選択すると、注文履歴の画面にIDだけがセットされるような作りにしようと考えています。
【注文内容の入力画面A】
・注文日
・受注ID
・商品ID
・注文先ID
・単価
・数量
・単位

【商品管理テーブル】
・商品ID
・メーカーID
・単価
・品番


このようにすると、商品管理のテーブルのレコードを勝手に削除されたりした場合に、大変な事になることを考えると躊躇してしまいます。
商品管理のテーブルはあくまでも参照にとどめて、その商品名や品番などは、注文履歴を保存する画面のフィールドに保存したほうが良いか、迷っています。

この点で良いアドバイスがあれば、よろしくお願いします。

投稿日時 - 2015-01-03 15:33:40

QNo.8878738

すぐに回答ほしいです

質問者が選んだベストアンサー

入力画面(フォーム)とテーブル設計は別に考えるようにしましょう。

通常は、注文履歴のテーブルに、商品ID(外部キー)以外の商品データ(商品名や品番)は保存すべきではないです。

履歴入力画面からは、商品管理テーブルは参照だけで変更できないような設計にすれば問題ないので。

また、リレーションシップで「参照整合性」にチェックを入れておけば、履歴テーブルのデータと紐づいているレコードをマスターから削除しようとすると警告が出て削除できないようになります。

ただし、例外として、例えば「単価」が頻繁に変わるように場合は、単価を注文履歴の方にも格納するということはあります。

注文履歴入力画面(フォーム)での商品名や品番の参照は、コンボボックスを利用すると簡単にでき、また、入力しやすいものになります。

■T'sWare Access Tips #360 ~コンボの2列目をテキストボックスに表示する方法(コントロールソース版)~
http://www.tsware.jp/tips/tips_360.htm

投稿日時 - 2015-01-03 17:37:35

お礼

ご回答ありがとうございました。

このコンボボックスの値を簡単に参照できるようにすれば、とても便利ですね。
早速利用させて頂きたいと思います。
あと、単価はその時〃で変わりますので、注文履歴テーブルに単価というフィールドを作り、そこにも保存していきたいと思います。しかし、仰るとおり、その他の項目、品番とか、そのようなフィールドは参照するというやり方にします。

投稿日時 - 2015-01-05 10:42:25

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問