
No.2ベストアンサー
- 回答日時:
正規化のメリットに関して最も重要な点は、データの保守であろうと思います。
複数のテーブルに散在したデータの更新は、テーブル数が多くなると、それに応じて労力が必要になります。
また、同じ意味を持つデータでも表現が異なり、データを修正する場合に、SQLに全ての場合を記載する必要が出てくる、即ち、データを全てのテーブルで洗い出しをしないと完全な修正が行えない、といった問題が出てきます。
但し、第三正規化の段階で、数行のテーブルを数多く作ることになるため、データの修正が発生しないことが判明している(規制当局が指定した用語で将来に渡って変更がないものなど)場合、単一テーブルでしか使用しない場合等では、敢えて正規化しない場合もありますが、データの修正・保守の観点からの判断必要だと思います。
上記のように記載しましたが、よほどのことが無い限り正規化は行うべきと考えています。
No.3
- 回答日時:
先日、正規形で回答したymmasayanです。
正規化の最大の目的はデータの一貫性の確保です。データベース内のデータ間に矛盾がない事。これが崩れるとデータベースは信頼を失い、雪○事件のように大変な事になります。
データの一貫性を守る上では、1事実1箇所と言うのが最も基本的な考え方です。
他の方が、すでに述べておられるように、同じデータが複数箇所にあると書き換えも大変ですが、書き換え漏れはもっと怖いです。
第一正規化では、1レコード(1行)内の繰り返しを排除しました。
第二正規化では、主キー、複合キーで、分離を行ないました。
第三正規化では、更に推し進めて徹底的な表の分割を行ないました。
第二正規化、第三正規化ではレコード間(行間)でダブっていたデータが1事実1箇所に集約されている事はお分かりでしょう。
実は正規化にはもう一つ重要な働きがあります。第一正規化では存在の危ういデータが、第二正規化、第三正規化で存在可能になると言う事です。
例えば、注文表に顧客データが含まれているとします。第二正規化か第三正規化で顧客データが顧客表として独立したとします。
第一正規形の注文表の中の、取引先A社の注文が全てキャンセルになったとします。するとA社の顧客データは注文表から消えてしまいます。
しかし、第三正規化までしてあれば、あえて顧客表のA社は消さなくてもいいのでA社の顧客データを残しておく事が出来ます。
正規化によって、DBの容量が減ると言う面もありますが、場合によっては増える事もあります。
正規化すると応答性の悪くなる事が多いです。そこで、特別なケースに限って正規化のレベルを下げる事が有ります。しかし、これは一貫性と効率を天秤にかけているわけであまりお勧めできませんが、覚悟してやるなら、最新の注意が必要です。
質問に有った、「メリット&デメリット」の形になっていなくてすみません。
No.1
- 回答日時:
私自身低レベルで、学校とかで体系だって勉強をしたことがありませんが・・・
いくつかのデータベース開発にかかわったことがあります。
メリット)
・データベースのサイズが少なくてすむ
・きちっと正規化設計されたデータベースは、プログラムの改変に強い。
(表現しづらいのですが、正規化されていないものは、破綻してしまうときがあります)
・大規模なDBでも、それなりの処理速度を確保できる。
デメリット)
・テーブルの設計が結構面倒です。
(実際の業務・利用方法と整合しにくいときがある)
・マスタテーブルのメンテナンスプログラムなどをきっちり作りこむと、全体の作業量が大きくなります。
(開発段階でも、運用段階でも)
・データの交換(たとえば、csvファイルでExcelに渡すなど)の際でもプログラムを作らなくてはならなくなる。
以前は、ちょっとしたDB開発でも、本能的に正規化していましたが、ここ数年のハード、ソフトの発展を見ると、ちょっと考えてしまいます。
正規化しないで安直に開発してしまう「力技」のほうが、後々いいのかな?と思ったり・・・・
#で、toto31さんと共に他の人の回答・意見を見せてもらおうと思い、回答したわけなんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本語のテーブル名、カラム名...
-
ACCESS検索★ある文字を複数のフ...
-
Accessでテーブル名やクエリ名...
-
「直需」の意味を教えてください
-
Oracleのビュー作成時に「指定...
-
【Access】フォームで自動計算...
-
Excel 2019 のピボットテーブル...
-
テーブルの存在チェックについて
-
Oracle 2つのDate型の値の差を...
-
Vbaでアクセスからエクセルにリ...
-
ACCESSでテーブルのチェックを...
-
再計算って出来ますか?
-
Accessのフィールド数が255しか...
-
ACCESSのクエリで集計で、先頭...
-
Access クロス集計クエリについて
-
【続続】Access2002で連番のつ...
-
accsessで顧客コードで氏名を呼...
-
Countと受付状態の表示に...
-
カウントが出来ません
-
どれがPrimary Key、ForeignKey...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日本語のテーブル名、カラム名...
-
db2でisnumericは使えないので...
-
検索時にヒットしない
-
Accessから主キーの無いOracle...
-
ACCESS2000:主キーに半角と全...
-
DB設計に要する見積もりについて
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
【Access】フォームで自動計算...
-
保存された情報として表示され...
-
accsessで顧客コードで氏名を呼...
-
【続続】Access2002で連番のつ...
-
下記の事を行うSQLがわかりませ...
-
Access クロス集計クエリについて
-
再計算って出来ますか?
-
Countと受付状態の表示に...
-
Access2000 更新のタイミング?
-
カウントが出来ません
-
エクセルVBAで5行目からオート...
おすすめ情報