データベースの非正規化
2017年4月22日 (土) 09:09時点における103.22.200.228 (トーク)による版
データベースの非正規化とは、データベースの教科書に載っている「データベースの正規化」とまったく逆のことを行うことで、超高負荷環境下での性能改善を試みる手法である。
概要
データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを「データベースの正規化」と呼ぶ。 教科書に書いてある定番のウリ文句であり、情報系の学校では「データベースを設計するときは正規化しよう」と習うことだろう。
メーカー | 住所 |
---|---|
A社 | 北海道 |
B社 | 青森県 |
商品ID | 商品名 |
---|---|
101 | メロン |
102 | ハスカップ |
103 | りんご |
その逆に1つのテーブルに全部詰め込む手法を「データベースの非正規化」と呼ぶ。
メーカー | 住所 | 商品名 |
---|---|---|
A社 | 北海道 | メロン |
A社 | 北海道 | ハスカップ |
B社 | 青森県 | りんご |
こちらは主に膨大な量のレコードを扱うITドカタの現場で使われる教科書クソ食らえな必殺技である。 数億レコードを突破するようなテーブルがいくつも存在する現実的な環境下ではテーブルのJOINなどしたらシステムは窒息死するため、このようなデータベースの設計となる事が多い。
非正規化という諸刃の剣に手を出すのは以下のようなケースが多い。
このような炎上するパターンの根底にあるのは「途中での仕様変更」であり、 見積もり段階でしっかりと想定データ量を算出して、必要に応じて最初から非正規化前提で設計および開発しているプロジェクトは成功することが多い。