正規化を学ぶ必要性(データベースが面白い)

f:id:ryoutaku_jo:20190105230821p:plain

【結論】

・正規化とは、データを保存する時の無駄を無くす為の

 データベースの設計思想

・正規化のメリットは下記2つ

 ・データの冗長性が排除され、更新時の不整合を防げる

 ・テーブルの持つ意味が明確になり、開発者が理解しやすくなる

・アプリケーション開発の中で、ある程度は自然と身に付くが、

 重要な概念なので、自身で言語化出来る様に、理解する必要がある。

 

 

 

【本題】

今回は、データベース設計における「正規化」がテーマです。

 

正規化とは

データを保存する時の無駄を無くす為のデータベースの設計思想

 

リレーショナルデータベースでは、

人間が分かりやすい様に、データを表形式で管理できます。

 

表(テーブル)は、一つだけでも運用できますが、

データを種類(カラム)が増えると、管理が大変になります。

 

逆に、無闇にテーブルを増やしてしまうと、今度は無駄が増え、

それが原因でデータが正常に更新できなくなる恐れがあります。

 

データベースのパフォーマンスを極力損なわずに、

人が管理しやすい様にテーブルを分割する為の考え方が、

正規化です。

 

正規化のメリット

・データの冗長性が排除され、更新時の不整合を防げる

・テーブルの持つ意味が明確になり、開発者が理解しやすくなる。

 

 

 

 

 

 

これを初めて学んだ時の感想なのですが、

「これ知らなくても、

テーブルの分割出来るだろ?」でした。

 

 

 

正規化を学ばずとも、

ある程度アプリケーションの作成をしていれば、

その中で効率的なテーブルの分け方は理解できます。

それに正規化は、複雑な概念とともに、

事細かに説明されているので、

逆に混乱してしまうのでは無いかと素人考えに思いました。

 

 

実際に私の様な考えに至る人は多い様で、

先日購入した「達人に学ぶDB設計徹底指南書」にも、

その事について言及されていました。

 

そこで記載されていた

関係データベース技術の分野で有名なクリス・デイトという方の、

正規化を学ぶ事に対する批判への反対意見が、

非常に興味深かったので、下記に引用します。

 

 

正規化理論は基本的に常識にすぎない

という理由で批判されてきた。

優秀な設計者であれば、

たとえBCNFの予備知識がなかったとしても、

この関係変数を射影SPSS

「自然に」分解するだろう。

だが、「自然に」とはどういう意味なのか。

設計者は「自然な」設計を選ぶ上で、

どのような「原理」を用いているのだろうか。

答えは、正規化の原理と全く同じである。

つまり、優秀な設計者は、

そうした原理を正式に学んだことがなくても、

その名前を言い当てることができなくても、

そうした原理がすでに頭の中にある。

従って、原理は確かに常識だが、

それらは正規化された常識なのである

正規化を批判する人は、だいたいこの点を見逃している。

それらの概念が実は常識に過ぎない事を

(実にもっともらしく)主張するが、

総じて、常識の意味を正確かつ

形式的に述べることが偉業であることに気づいていない

 

 

要するに、実践することは容易くても、

それを順序立てて、事細かに説明することは、

非常に難しく、かつ極めて重要という事です。

 

全ての人が同じ品質でデータベース設計が出来る様にするには、

その手順を細部まで明確にしておく必要があるので、

そういう意味では、正規化は非常に優れているのかもしれません。

 

なので、私も他の人に説明が出来る様に、

正規化の流れを、ここにまとめたい

 

 

、思っていたのですが、

現時点でかなり文章が長くなったので、

今回はここまでにしておきます

 

以上、やっぱりデータベースは奥が深くて面白い!

 

《今日の学習進捗》 

HamlとSassを使ってアプリのビュー作成中

フロントエンドは本当に苦手…

BEMとか新しい概念も入って来て混乱中。

 

学習開始からの期間 :29日目
今日までの合計時間:259.0h
今日までに到達すべき目標時間:264.8h
目標との解離:-5.8h

 

10,000時間」まで、

残り・・・「9741時間!」