- ベストアンサー
「第1正規化」の定義について
- 「第1正規化」とは、データベース設計の基本的な概念の一つであり、繰り返しの部分を複数のレコードに分割して繰り返しを排除する操作のことです。
- 一方、別の定義では、「第1正規化」とは、主キーによる表の分割を行い繰り返しを排除することで、データベースを正規化する手法の一つとして言及されています。
- 定義Aと定義Bのどちらが正しい「第1正規化」なのかは意見が分かれており、定義によって異なる解釈がされています。しかし、どちらの定義もデータの重複をなくし、データベースの正規化を目指すという共通の目的を持っています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
結論から言うと,定義A,定義Bどちらも正しいということになります。 -------- コンピュータ科学の観点から関係データベース(RDB)を解説した解説書を読むと,関係代数とか関係論理という数学を基にした用語が登場します。RDBというのは集合に対する演算なんです。 このようなコンピュータ科学の観点で捉えた,第一正規形の本来の定義は「定義A」です。 コンピュータを勉強しはじめたばかりの初心者が,この「定義A」の第一正規形の表を見て,次のような感想を漏らすときがあります。 「繰り返しの部分を複数のレコードにして繰り返しを排除する操作,と言っているけれど……。たしかに伝票の明細部分は複数行に分かれたけれど,伝票のヘッダ部分は複数行に同じ内容が繰り返し書かれているよね。繰り返しは排除されていないじゃん?」 これは「繰り返しを排除する」という意味を勘違いしているわけです。 正しい解釈は,(Excelにおける1つのセルに)複数の値が格納されているようでは個別の値を扱えない。社員1,社員2,社員3のように同一定義域の属性が繰り返されているようでは社員というものを簡潔に扱えない。だから同一定義域の属性は1つにまとめて,なおかつ1セル=1値の形式にしなさいということです。 数学的には,同じデータが繰り返されているというのは問題ではないんです。 まったく同じ行(tuple)が絶対に存在しないのであれば,行中のいくつかの属性値が他の行と同じデータの繰り返しであろうとも,RDBとしては整合性がとれています。 集合に対する演算で正しい結果が得られるのならば,それがどれだけ肥大化したデータ群であろうとも,数学的にはなんの問題もありません。 -------- しかし,システム開発の観点からすると,そうもいきません。 「定義A」の表が,数学的には正しいRDBだとしても,それをそのまま実装すると同じデータを複数行繰り返して記録する羽目になります。 時代的にDBというものを知らず,昔のファイル設計しか経験していないシステムエンジニアであっても,というかコンピュータを知らない一般人であっても,「定義A」の同じデータの繰り返しをそのまま実装することには相当な違和感を覚えるのではないですか。 ですから,システム開発の現場では「定義B」が第一正規形だと教えるのです。 定義Aが本来の定義なのですが,理論屋的な定義Aの形式を経なければならないなんてことはシステム開発の現場ではまったく?無いので,実務屋的な定義Bで大丈夫なのです。
お礼
とてもよく解りました! 理論上と実務上の違いだったのですね。 本当にありがとうございました。