• ベストアンサー

正規形のメリット&デメリット

数日前に「正規形の定義」が知りたくて、質問を書いたものです。 すばらしい解答をいただき、正規形の定義は理解できた私ですが、また新たな問題にぶつかってしまいまし。正規化することに、一体、どんなメリット&デメリットがあるのでしょうか?どなたか、教えてください。

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

  • ベストアンサー
  • SpeedKing
  • ベストアンサー率50% (6/12)
回答No.2

正規化のメリットに関して最も重要な点は、データの保守であろうと思います。 複数のテーブルに散在したデータの更新は、テーブル数が多くなると、それに応じて労力が必要になります。 また、同じ意味を持つデータでも表現が異なり、データを修正する場合に、SQLに全ての場合を記載する必要が出てくる、即ち、データを全てのテーブルで洗い出しをしないと完全な修正が行えない、といった問題が出てきます。 但し、第三正規化の段階で、数行のテーブルを数多く作ることになるため、データの修正が発生しないことが判明している(規制当局が指定した用語で将来に渡って変更がないものなど)場合、単一テーブルでしか使用しない場合等では、敢えて正規化しない場合もありますが、データの修正・保守の観点からの判断必要だと思います。 上記のように記載しましたが、よほどのことが無い限り正規化は行うべきと考えています。

その他の回答 (2)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.3

先日、正規形で回答したymmasayanです。 正規化の最大の目的はデータの一貫性の確保です。データベース内のデータ間に矛盾がない事。これが崩れるとデータベースは信頼を失い、雪○事件のように大変な事になります。 データの一貫性を守る上では、1事実1箇所と言うのが最も基本的な考え方です。 他の方が、すでに述べておられるように、同じデータが複数箇所にあると書き換えも大変ですが、書き換え漏れはもっと怖いです。 第一正規化では、1レコード(1行)内の繰り返しを排除しました。 第二正規化では、主キー、複合キーで、分離を行ないました。 第三正規化では、更に推し進めて徹底的な表の分割を行ないました。 第二正規化、第三正規化ではレコード間(行間)でダブっていたデータが1事実1箇所に集約されている事はお分かりでしょう。 実は正規化にはもう一つ重要な働きがあります。第一正規化では存在の危ういデータが、第二正規化、第三正規化で存在可能になると言う事です。 例えば、注文表に顧客データが含まれているとします。第二正規化か第三正規化で顧客データが顧客表として独立したとします。 第一正規形の注文表の中の、取引先A社の注文が全てキャンセルになったとします。するとA社の顧客データは注文表から消えてしまいます。 しかし、第三正規化までしてあれば、あえて顧客表のA社は消さなくてもいいのでA社の顧客データを残しておく事が出来ます。 正規化によって、DBの容量が減ると言う面もありますが、場合によっては増える事もあります。 正規化すると応答性の悪くなる事が多いです。そこで、特別なケースに限って正規化のレベルを下げる事が有ります。しかし、これは一貫性と効率を天秤にかけているわけであまりお勧めできませんが、覚悟してやるなら、最新の注意が必要です。 質問に有った、「メリット&デメリット」の形になっていなくてすみません。

  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

私自身低レベルで、学校とかで体系だって勉強をしたことがありませんが・・・ いくつかのデータベース開発にかかわったことがあります。 メリット) ・データベースのサイズが少なくてすむ ・きちっと正規化設計されたデータベースは、プログラムの改変に強い。  (表現しづらいのですが、正規化されていないものは、破綻してしまうときがあります) ・大規模なDBでも、それなりの処理速度を確保できる。 デメリット) ・テーブルの設計が結構面倒です。   (実際の業務・利用方法と整合しにくいときがある) ・マスタテーブルのメンテナンスプログラムなどをきっちり作りこむと、全体の作業量が大きくなります。 (開発段階でも、運用段階でも) ・データの交換(たとえば、csvファイルでExcelに渡すなど)の際でもプログラムを作らなくてはならなくなる。 以前は、ちょっとしたDB開発でも、本能的に正規化していましたが、ここ数年のハード、ソフトの発展を見ると、ちょっと考えてしまいます。 正規化しないで安直に開発してしまう「力技」のほうが、後々いいのかな?と思ったり・・・・ #で、toto31さんと共に他の人の回答・意見を見せてもらおうと思い、回答したわけなんです。