重複の可能性:
データベースの正規化は正確には何をしますか?
誰かがデータの正規化を明確にしてもらえますか? さまざまなレベルとは何ですか? いつ「非正規化」する必要がありますか? 過正規化できますか? 何百万ものレコードを含むテーブルがあり、それを過度に正規化したと思いますが、よくわかりません。
重複の可能性:
データベースの正規化は正確には何をしますか?
誰かがデータの正規化を明確にしてもらえますか? さまざまなレベルとは何ですか? いつ「非正規化」する必要がありますか? 過正規化できますか? 何百万ものレコードを含むテーブルがあり、それを過度に正規化したと思いますが、よくわかりません。
百万の列がある場合は、おそらくそれを正規化していないでしょう。
正規化とは、
すべての非キー属性は、「キー、キー全体、およびキー以外の何物でもないという事実を提供する必要があります」。
キー以外に依存する列がある場合は、テーブルを正規化する必要があります。ここ
を参照してください。
コメントへの返信に追加:
ProductIDをお持ちの場合| ProductType | ProductTypeID。ProdcutTypeIDはProductTypeのみに依存しますが、そのための新しいテーブルを作成する必要があります
。ProductTypeIDおよび他のテーブル:ProductTypeID | ProductTypeName。
したがって、あなたの質問に答えるために、製品に関するものは十分に正確ではありません。最初のケースの私の例では、私も製品に関するものでした。すべての列はProductIDのみに関係する必要があります(製品に関連している場合でも、製品のみを説明し、他には何も説明しないと言うことができます-それは正確です)。
行の数は、一般的に言えば、関係ありません。
正規化とは、リレーショナル データベースでのデータの重複を減らすことです。最も一般的なレベルは第 3 正規形 (「キー、キー全体、およびキーのみ」で記述されるもの) ですが、さまざまなレベルが多数あります。主なレベルのリストについては、ウィキペディアのエントリを参照してください。 . (実際には、人々は第 3 正規形を達成するためにうまくやっていると考えているようです。) 非正規化とは、通常、パフォーマンスの向上と引き換えに、より多くのデータの重複を受け入れることを意味します。
他の人が言ったように、データベースの正規化は、データの重複の削減と、より一般的なデータ モデル (設計時に予期しないクエリに簡単に応答できる) に関するものです。データベースの正規化は、正式な十分なプロセスを可能にします。実験するときは、ほとんどの場合、データ分析方法に従い、最後に正規化されたデータベースを取得します。
通常、データベースを正規化することは良い考えですが、落とし穴があります。多くの場合、新しいテーブルの作成と、テーブル間の JOIN 関係が含まれます。JOIN は実行時に (非常に) 高いパフォーマンス コストがかかることが知られています。
別のコストとして、必要なデータにアクセスするためのより複雑なリクエストを作成する必要があり、SQL の初心者にとっては問題になる可能性があります。とにかく正規化に固執し (他の人が言ったように正規化にはいくつかのレベルがあるため、通常は第 3 正規形で十分です)、SQL のスキルを高めることが最善の方法です。