データを取得しようとしていて、明らかに簡単な方法がない場合ですか?
何かがそれ自体のテーブルであるべきだとわかったときは?
法律は何ですか?
データを取得しようとしていて、明らかに簡単な方法がない場合ですか?
何かがそれ自体のテーブルであるべきだとわかったときは?
法律は何ですか?
同じデータを繰り返す必要があることに気付いたとき、または単一のフィールドを配列として使用し始めたとき。
これはやや皮肉な答えですが、データが十分に正規化されていないことがわかった場合。Web には、正規化のレベル (より正確には「フォーム」) に関する多くのリソースがあり、ここで説明するよりも詳細にフォームを説明しています。第 1 正規形と第 2 正規形はほぼ必須です。3 番目 (実際には 4 番目) の正規形でない場合は、その理由を明確に説明する必要があります。
データベースの正規化に関するウィキペディアの記事を確認してください。
他の人は、正規化の正式なルールを指摘しています。以下に、私が使用する非公式のガイドラインをいくつか示します。
テーブルに列があり、その名前が数字だけ異なる場合 (例: Phone1 と PHone2)。
テーブル内の別の列が入力されている場合にのみ入力する必要があるテーブル内の列がある場合。
データベース内の「事実」 (番地など) を更新するために複数の UPDATE が必要な場合。
どのテーブルから情報を取得するかによって、同じ質問に対して 2 つの異なる回答が得られる場合があります。
少なくとも 2 つのテーブルを JOIN せずに、重要な質問に対する答えをデータベースから取得できる場合。
データベースに「1 つのみが許可される」以外の数量ベースの制限がある場合 (つまり、「1 つのアドレスのみが許可される」は問題ありませんが、「2 つのアドレスのみが許可される」は正規化の問題を示します)。
SQL データベースにさらに正規化が必要かどうか疑問に思っているとき。
リレーショナル データベースがあるときはいつでも....<grin/>
いいえ、実際には法律があります。ウィキペディアのリンクをご覧ください。
それらは5つの正規形またはそのようなものと呼ばれます。50 年代/60 年代にリレーショナル データベースを発明した人物、EF Codd の出身です。
「鍵は鍵全体で、鍵以外は何もないので、コッドを助けて」
これは概要です:
通常、必要なのは 3NF だけで、次の 3 つのルールに従います。
表のすべての列は、次のものに依存する必要があります。
多くの場合、パフォーマンス上の理由から 2NF に「ダウングレード」できますが、その意味を理解し、問題が発生した場合にのみ使用できますが、すべての設計の最初の目標は 3NF にする必要があります。
他の誰もが言ったように、複数のテーブルに (多すぎる) 重複する列ができ始めるとわかります。
そうは言っても、複数のテーブルに冗長な列があると便利な場合があります。これにより、複雑なクエリで実行する必要がある JOIN の数を減らすことができます。すべてのテーブルの同期を保つように注意してください。そうしないと、問題が発生するだけです。
データベースの正規化の基本の説明を参照してください。
現在、正常化のレベルはどの程度ですか? 答えられない場合は、データベースがごちゃごちゃしていると思います。私は常に最初の設計で 3 番目の法線を作成し、必要に応じてさらに非正規化または正規化します。
これはかなり良い記事です。正常になることは芸術ではなく科学です。いつ非正規化するかを知っている...それは芸術です。
http://www.alvechurchdata.co.uk/hints-and-tips/softnorm.html
対話型アプリケーションをサポートするトランザクション データベースについて話していると思いますが、その価値は...
レポート専用に使用され、ETL プロセスによってのみ更新される OLAP データベースは、正規化されていない構造の恩恵を受ける可能性があります。これらのアプリケーションでは、冗長なデータ ストレージと複製のコストを受け入れて、結合を減らすことによるパフォーマンス上の利点と、(場合によっては技術的ではない) データ アナリストとビジネス アナリストの使いやすさを向上させます。
トランザクション データベースは常に実用的な範囲 (少なくとも 3NF) で正規化してから、必要に応じて選択的に非正規化する必要があります。また、非正規化の必要性は、理想的には実際のパフォーマンス テストの結果に基づいている必要があります。
基本的な情報を抽出するためだけに膨大な量のデータを検索する必要がある場合、つまり、どのような製品カテゴリがあるかなどです。