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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
db2でisnumericは使えないので...
-
日本語のテーブル名、カラム名...
-
Accessから主キーの無いOracle...
-
検索時にヒットしない
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
Accessでテーブル名やクエリ名...
-
変数が選択リストにありません
-
必須入力項目と入力必須項目
-
ACCESSのクエリで集計で、先頭...
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
ACCESSでテーブルのチェックを...
-
セルの右クリックで出る項目を...
-
VBAで複数の数式セルを最終行ま...
-
Accessでテーブルの値をテキス...
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
db2でisnumericは使えないので...
-
日本語のテーブル名、カラム名...
-
Accessから主キーの無いOracle...
-
検索時にヒットしない
-
DB設計に要する見積もりについて
-
インデックスのアルゴリズムとB...
-
ACCESS2000:主キーに半角と全...
-
ORACLEでダミー行を作成したい
-
第二正規形化のサンプルについ...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
セルの右クリックで出る項目を...
-
Access テキスト型に対する指定...
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
ACCESSのクエリで集計で、先頭...
-
変数が選択リストにありません
-
Accessのフィールド数が255しか...
-
Accessでテーブルの値をテキス...
おすすめ情報