ここから本文です

データベースについてです。

アバター

ID非公開さん

2020/1/1821:30:21

データベースについてです。

正規化と言うのがあります。

第1正規化など、エクセルで言う1セルに一つのデータにする所は理解出来るのですが、主キーを用いてリレーションシップで結びつける所のメリットがあまりわかりません。



顧客マスターテーブルと商品マスターテーブルからなる売り上げテーブルがあるとします。
売り上げテーブルにはマスターのコード番号が記述されます。

これは結局、データ数、容量としては売り上げが増えれば増えるだけ増えませんか?


顧客マスター情報や商品マスター情報のフィールドが多いと有効的に感じますが、
例えば、
顧客マスターは
コード番号と顧客名前のみ、
商品マスターはコード番号と商品名前のみ、
だとしない方が良いものですか?

正規化するとテーブルが増えるし、入力フォームやレポートを作成する元のクエリを用意しないと行けなくなりますよね?

どうなんでしょうか?

閲覧数:
10
回答数:
3

違反報告

ベストアンサーに選ばれた回答

ふらさん

2020/1/2112:35:14

売上テーブルという1テーブルしかないとそこまでメリットを感じないかもしれませんが、例えば
・売上テーブル
・発注テーブル
・請求テーブル
・発送テーブル
・売上集計テーブル
という風にテーブルが増えていったとき、各テーブルに「顧客名」が存在していると、もし顧客の名前が変わった時、各テーブルの複数のレコードを更新する必要があるので、大変だと思いませんか?
顧客マスタがあれば、顧客マスタの1レコードを更新するだけで済みます。

あと、別の観点でいうと、
「現在、自社で扱っている商品は何種類か?」
「顧客リストを作成して欲しい」
なんて時に、マスタがあれば簡単に対応することができますね。

ご指摘の通り、参照が手間になるというのはその通りです。
なので、「更新が入った場合の手間」と「参照の手間」を比べることになりますが、更新の手間の方が煩わしい(すべてのテーブルのすべてのデータを正しく更新しないといけない)場合が多いので、一般的な手法として正規化という考え方が推奨されています。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

nan********さん

2020/1/1823:20:40

ざっくり言うと、同じ意味のデータは複数箇所に持たないと言うことです。

複数箇所に同じデータがあればデータ量が増えるのは当然ですが、たとえば顧客名と言う項目が顧客マスタと売上データにあった場合、顧客名が変更になった時顧客マスターと売上データも全て変更する必要が出てきます。

> 正規化するとテーブルが増えるし

それはもちろんそうですが、ではたとえば顧客マスターに売上データを入れるとした場合、どうやってデータを持つつもりでしょうか?
顧客マスタのフィールドに売上データの配列データのようなものをもたせますか?
売上データが数万件とかあったらどうしますか?

まぁ正規化はRDBだから必要になった考え方(そうでないと非効率だから)とも言え、たとえば今広がりつつあるKey-Value型のNoSQLのデータベースとかなら、理想的にはシステム全体で一つのテーブルにするのが良い、などとも言われています(私にはちょっと理解できませんが)。

プロフィール画像

カテゴリマスター

nora1962jpさん

2020/1/1821:47:51

正規化はある意味データの論理構造の分析でもあるので。

正規形として整理した結果をどう実装するかは別問題です。
結合に必要な実行処理コストと論理的に矛盾した更新が発生するリスク、顧客マスタなどで事前に顧客情報(顧客コードと顧客名等)を登録出来ない問題をどう扱うかなどを勘案した上で「正規化崩し」するかどうかはあります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる