「データベースの非正規化」の版間の差分

ページの作成:「'''データベースの非正規化'''とは、データベースの教科書に載っている「データベースの正規化」とまったく逆のことを行う...」
 
編集の要約なし
 
(3人の利用者による、間の5版が非表示)
1行目: 1行目:
'''データベースの非正規化'''とは、データベースの教科書に載っている「データベースの正規化」とまったく逆のことを行うことで、超高負荷のかかる環境下におけるスピードを改善する手法である。
'''データベースの非正規化'''とは、[[データベース]]の教科書に載っている「[[データベースの正規化]]」とまったく逆のことを行うことで、超高負荷環境下での性能改善を試みる手法である。


== 概要 ==
== 概要 ==
=== 正規化 ===
データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを「[[データベースの正規化]]」と呼ぶ。
データの重複をなくし整合的にデータを取り扱えるようにデータベースを設計することを「[[データベースの正規化]]」と呼ぶ。
教科書に書いてある定番のウリ文句であり、情報系の学校では「データベースを設計するときは正規化しよう」と習うことだろう。
データベースの教科書に書いてある定番のウリ文句であり、情報系の学校では「データベースを設計するときは正規化しよう」「テーブルはJOINで結合して使おう」と習うことでしょう。
{| class='wikitable'
{| class="wikitable"
|+
|+
! メーカー !! 住所  
! メーカー !! 住所  
13行目: 14行目:
|}
|}


{| class='wikitable'
{| class="wikitable"
|+
|+
! 商品ID !! 商品名  
! 商品ID !! 商品名  
24行目: 25行目:
|}
|}


 
=== 非正規化 ===
その逆に1つのテーブルに全部詰め込む手法を「データベースの非正規化」と呼ぶ。
その逆に1つのテーブルに重複クソ食らえで全てを詰め込む手法を「データベースの非正規化」と呼ぶ。
{| class='wikitable'
{| class="wikitable"
|+
|+
! メーカー !! 住所 !! 商品名  
! メーカー !! 住所 !! 商品名  
39行目: 40行目:
数億レコードを突破するようなテーブルがいくつも存在する現実的な環境下ではテーブルのJOINなどしたらシステムは窒息死するため、このようなデータベースの設計となる事が多い。
数億レコードを突破するようなテーブルがいくつも存在する現実的な環境下ではテーブルのJOINなどしたらシステムは窒息死するため、このようなデータベースの設計となる事が多い。


 
ただし非正規化は諸刃の剣であるということを忘れてはならない。途中での方針変換による採用は非常に危険である。
非正規化という諸刃の剣に手を出すのは以下のようなケースが多い。
# 正規化した状態で設計・開発する
# 正規化した状態で設計・開発する
# サービス開始直後に過負荷でシステムダウン
# サービス開始直後に過負荷でシステムダウン