限定しりとり

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

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

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


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

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

A 回答 (1件)

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



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

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

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

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

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

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

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

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

お礼日時:2015/01/05 10:42

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

関連するカテゴリからQ&Aを探す