• ベストアンサー

履歴を管理するテーブル構造について

tosi0000の回答

  • tosi0000
  • ベストアンサー率28% (8/28)
回答No.5

>この場合ですと、商品の販売価格等の履歴は、商品マスタ >で管理するのではなく、すべて、販売情報として複製され >るということでしょうか? どちらでも良いと思います。 運用で決まります。 単価の変動が全く無いものであれば、商品マスタに入れますし、その都度単価が違っていれば、この履歴ファイルへ入れても良いと思います。 同様に、販売単価の値引き・値上げなどが受注後に発生するようなものであれば、別途にファイルの作成を考慮する必要も出てきます。 >別途に先頭へ識別番号用の項目を追加して、キー情報とし >て連番を付けて行きます。これをマスタindexファイルと >します。 >とは具体的にはどういうことですか? 他のファイル(=テーブル)からこの履歴ファイルを参照するための、indexファイルと言う意味合いです。 複雑なシステムになってきますと、多数のファイルから、別の多数のファイルへの読込が発生してきます。そのため、各ファイルに対して、キーとなる項目を決めて関連付けを行えば、整理されたシステムが出来ると言う意味合いです。 単純なシステムであれば、これが逆に複雑に見えて足枷となってしまいます。 運用・環境などで色々と状況は変わってきますので、これが正しいとはなかなか決めることが出来ない分野であろうと思います。 (尚、ファイルはテーブルの意味合いで読んで下さい。)

関連するQ&A

  • Access メインフォームにすべてのテーブルを

    アクセス 超初心者です。 お恥ずかしいのですがまた 超初歩的なことで困っています。 テーブルが二つあり、 一つは 基本データテーブルで 顧客コード(主キー)- 社名ー住所 もう一つは 商品履歴で 顧客コード- 商品 - 数量 このような感じです。 で、顧客コードでリレーションシップを設定して メインフォームに顧客コード・社名・住所、 サブフォームで その顧客の 商品・数量を表示させているのですが 商品履歴テーブルにデータが無い顧客データは メインフォームに表示されませんよね? どうしたら全件表示されるようになりますか?

  • テーブル設計につきまして(正規化)

    顧客情報管理サイトを作ろうと思っています。 ・非正規化  {顧客コード , 氏名 , かな名 , 性別 , 郵便番号 , 都道府県 , 市区町村 , 建物名 , 電話番号 ,  FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  の列を考えております。 ・正規化テーブル  1.顧客情報テーブル   {顧客コード , 氏名 , かな名 , 性別 ,郵便番号(外部キー) , 建物名 , 電話番号 ,   FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  2.郵便情報   {郵便番号(主キー) , 都道府県 , 市区町村 これ以上、正規化できないと思っているのですが、顧客情報テーブルをもっと効率よく テーブルを設計し、正規化できるものでしょうか? よろしくお願いします。

  • マスタテーブルの変更履歴について

    データベースについて質問させていただきます。 例えば、飲食店で発行されるレシートには以下が記載されています。 ・店舗名、電話番号、担当者名 ・購入した商品名、値段、会計 これらを後に会社の業務で画面にレシートのような情報を表示したり、データの分析に使う場合、データベースを作成すると思います。 そのデータベースとしては、 以下のようなものが必要だと、私は考えました。 ・店舗テーブル…属性:店舗コード、店名、電話番号、住所など ・従業員テーブル…属性:従業員ID、名前、所属の店舗コード ・顧客テーブル…顧客ID、顧客名、住所、電話番号 ・商品テーブル…属性:商品ID、商品名、単価 ・売上履歴テーブル…属性:購入履歴ID、商品ID、個数、購入日時、顧客ID、購入した店舗コード、従業員ID これらを踏まえて、以下の質問をさせていただきます。 ・マスタの更新や別途、変更履歴テーブルが必要なのか…商品テーブルは日々属性の情報が変更されると思います。例えば、不況によって、単価が変わるなど。これをマスタテーブルの単価だけ変更する対応だとすると、購入履歴テーブルは商品テーブルを利用するので、単価の変更前に購入した履歴も値段が変更されてしまいます。この対応策として、別途、商品マスタの履歴テーブルを作って購入日時などを元に正しい単価を判断するような感じで対応すると良いのでしょうか? ・テーブルの作成や検索の都度、毎回結合するのか…例えば、Aさんの購入履歴を画面に表示する場合、画面にAさんの名前を入力して検索ボタンを押すと、購入履歴テーブルから必要なレコードを取り出して、Aさんの購入履歴を画面に表示するイメージをしています。この際、購入履歴テーブルは、商品IDを元に商品テーブルと結合したり、他には顧客テーブルと従業員テーブルとも結合する必要があります。検索をする際は、毎回テーブル結合を行うのでしょうか?それならば、見にくいイメージがありますが、購入履歴テーブルの顧客IDを名前にしておいたり、従業員IDを従業員の名前にしておくと、テーブルの結合が必要なくて良いのではないでしょうか? 大変文章が長く、また、読みにくいもので申し訳ございません。 たくさんの回答、よろしくお願いいたします。

  • Access、同じテーブルの2つの項目対他のテーブルで1つの項目のリレーションは可能?

    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等はさっぱりわかりませんので、普通の設定の範囲内で、できるかどうかよろしくお願いします。

  • 正規化されていないテーブルの分割について

    正規化されてない下記のようなテーブルがあります。 テープル1(主キー:得意先、商品コード) 得意先   商品コード A      1 A      2 B      5 B      6 B      7 C      1 C      2 これを以下のようにテーブル2つに分けたいです。 テーブル2(主キー:得意先) 得意先 パターン A     x B     y C     x テーブル3(主キー:パターン、商品コード) パターン 商品コード x      1 x      2 y      5 y      6 y      7 このとき、テーブル1のデーターをもとに テーブル2やテーブル3のレコードを生成したいのですが、 テーブル3を抽出するSQL文がどうしても思いつきません。 (やりたいのは、あらかじめ登録したパターンを得意先ごとに選択するという形にしたいです。) 簡単にできるような気もするのですが... パターンについては、ランダムな文字列で構わないです。 SQL文等アドバイスの程、よろしくお願い致します。

  • アクセスでの複数のテーブルでのオートナンバーについて

    こんにちはアクセス2000で在庫管理をしています。 超初心者です 商品テーブルで 商品コードをオートナンバーにしていますが 仕入先でテーブルを分けることになり 商品マスタA、商品マスタBとわけたのですが 主キーである商品コードを AB重複しないようにすることは可能ですか? またやり方はどうすればいいのでしょうか? リレーションシップなどの設定かなと思い いじくってみましたが、どうもうまくいかず悩んでいます。 よろしくお願いいたします

  • ACCESS テーブルの扱い方

    環境: WINDOWS XP PRO ACCESS 2000 Oracle 9i [現状] フォームの作成時にて、「サブフォーム/サブレポート」を使ってOracleで作成したデータシート形式の(購入履歴)テーブルを表示しています。 [質問内容] 購入履歴テーブルには次のような情報が入っているのですが、 特定の顧客コードの購入履歴のみを動的に変化させて表示させる事は可能でしょうか? (動的にとは、フォーム側(プログラム側)で入力した顧客コードに対応した購入履歴を表示させるという意味で使用しています。) 宜しくお願い致します。 [購入履歴テーブル] 顧客コード 商品名 購入日付 ━━━━━━━━━━━━━━ 00001   みかん  01/11/11 00001   リンゴ  01/12/22 00002   バナナ  01/08/24 00003   リンゴ  01/09/09 ・ ・ ・

  • データベース、テーブル設計についてです。

    現在、ブランドサイズをインターナショナルサイズに変換するデータベース設計をしていて悩んでいることがあります。どうか知恵をお貸しください。 参考にしています書籍は、ミック著「達人に学ぶDB設計徹底指南書」です。 書籍には、正規化の次数が低いほど検索SQLのパフォーマンスは良いですが、データ整合性は低く、正規化していくほどパフォーマンスが低下する代わりにデータ整合性が高くなります。と書いています。 ですので、正規化した結果、5つのテーブルが出来上がりました。 これらを正規化したテーブルを中間テーブルで扱うには、どのように設計すればよろしいでしょうか? 以上、よろしくお願いします。 下記は、正規化したテーブルです。 テーブル名 :: ブランド 扱うデータ :: (仮)A、その他ブランド.... テーブル名 :: 性別 扱うデータ :: メンズ、レディース、ユニセックス テーブル名 :: カテゴリー 扱うデータ :: ウェアー、ボトム、シューズ、その他カテゴリー.... テーブル名 :: ブランドサイズ 扱うデータ :: 1、2、3、その他ブランドサイズ.... テーブル名 :: インターナショナル・サイズ 扱うデータ :: S、M、L、その他サイズ....

    • ベストアンサー
    • MySQL
  • 表と表の結合について

    新人研修で、「表の結合の際に、結合する列がなぜその列なのか?」を説明する方法を悩んでおります。 <元表> 商品コード、商品名、購入数、顧客情報 <正規化> 商品テーブル:商品コード、商品名 売り上げテーブル:商品コード、購入数量、顧客I これを見たとき、私は 「商品コード」で 結合すれば、「どこ顧客が、何の商品」を購入されたかというのがわかるのですが、 [質問1] なぜ商品コードで、「結合する仕様になっているか」の説明を求められたとき うまく説明する方法が思いつきません・・・。 「売り上げ伝票から正規化されて作成されたから、正規化する前の情報を出せるように関連付けするために、主キーの商品コードを、各表2つに残しておく。」 と言う説明しか出来ないのです。 もっとわかりやすい説明がありましたらご教授のほうお願いします。 できれば、正規化と言う情報を使わずに、「商品コード」で結合する理由を説明したいのです。

  • 顧客管理で困ってます

    Access2000を使う初心者で、うまく質問できませんどうか読み取ってください。 自動車整備工場の顧客管理データベースを作ろうとしています。 一人の顧客が、複数台の自動車を所有している場合、テーブルの設計はどの様にするのがいいでしょうか? テーブルは、 顧客情報テーブル 作業履歴テーブル を用意すると思いますが、車輌情報テーブルはどの様にリレーションすればいいでしょうか? 最終目標は、顧客テーブルと作業記録テーブル・車輌テーブルをリレーションして、車両ごとの作業履歴と顧客ごとの売上管理をしたいのです。   どうかアドバイスをお願いします。