正規化vs。 データベースの非正規化

データベースの正規化は、アプリケーション開発の神聖な役割の1つです。 あなたが受講した、または読んだ本のすべての学部プログラミングコースは、おそらく データベースの正規化.

その真実に挑戦する時が来ました。 データベースを非正規化しても問題ない場合があります。

いつ正規化する必要がありますか?

データベースの正規化は、データの整合性を保護します。 多くの場合、それは素晴らしいアイデアであり、あなたはすべきです 始める 正規化を念頭に置いたデータベース設計の取り組み。 データベースを正規化できる場合は、それを実行してください。

肝心なのはあなたが したほうがいい そうしない本当に正当な理由がない限り、データベースを正規化します。 正規化は通常、サウンドデザインの実践です。 冗長な情報を減らし、パフォーマンスを最適化し、あなたが持つ可能性を減らします 同じデータがあなたの異なる隅に隠されていることに起因するデータ整合性の問題 データベース。

正規化しないいくつかの正当な理由

そうは言っても、データベースを正規化しない理由はいくつかあります。 いくつか見てみましょう:

  1. 結合は高価です. データベースの正規化には、多くの場合、多数のテーブルの作成が含まれます。 実際、5つまたは10のテーブルにまたがる単純なクエリであると思われるものに簡単にたどり着くことができます。 5テーブル結合を試したことがある場合は、原則として機能することはご存知でしょうが、実際には非常に時間がかかります。 大きなテーブルに対する複数結合クエリに依存するWebアプリケーションを構築している場合は、自分自身に気付くかもしれません。 「このデータベースだけが正規化されていなかったら!」と考えました。 その考えを頭の中で聞いたら、検討するのに良い時期です 非正規化。 データの整合性を実際に損なうことなく、そのクエリで使用されるすべてのデータを1つのテーブルに貼り付けることができる場合は、それを実行してください。 反逆者になり、データベースを非正規化します。 振り返ることはありません!
  2. 正規化された設計は難しい. 複雑なデータベースを使用している場合 スキーマ、正規化の複雑さをめぐって、テーブルに頭をぶつけていることに気付くでしょう。 簡単な経験則として、4番目の正規形に移行する方法を理解するために一日中費やしている場合は、正規化をやりすぎている可能性があります。 一歩下がって、続行する価値があるかどうかを自問してください。
  3. 速くて汚いのは速くて汚いはずです. プロトタイプを開発しているだけの場合は、すぐに機能することをすべて実行してください。 本当。 大丈夫です。 エレガントなデザインよりも迅速なアプリケーション開発の方が重要な場合があります。 プロトタイピングフェーズを超える準備ができたら、戻ってデザインを注意深く確認することを忘れないでください。 迅速で汚いデータベース設計に支払う代償は、本番用に構築するときに、データベースを破棄して最初からやり直す必要があるかもしれないということです。
  4. NoSQLデータベースを使用している場合、従来の正規化は望ましくありません。 代わりに、はるかに寛容なBASEモデルを使用してデータベースを設計してください。 これは、電子メール、画像、ビデオなどの非構造化データを保存する場合に役立ちます。

注意の言葉

データベースの正規化は一般的に良い考えです。 合理的であると思われる場合は、正規化の原則に従うようにしてください。 ただし、すべての指標が正規化が複雑すぎて実装できないことを示している場合は、データを保護しながら作業を完了するアプローチを検討してください。

最後に、正規化のルールから逸脱することを選択した場合は、データベースの整合性をどのように実施するかについて特に注意してください。 冗長な情報を保存する場合は、トリガーやその他のコントロールを配置して、情報の一貫性を維持してください。