ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

NoSQLでいいのかも? その1:本当に正規化は必要なのか?

2013-02-01 13:35:23 | Weblog
NoSQLとRDBの使い分けっていうのを、世の中ではしている(していく)わけなんだけど、
RDBが必要な理由を、これから何回かに分けて考えてみたい。




■RDBが必要な理由-一貫性の確保

RDBが必要な理由で第一に挙げられるのは、
一貫性の確保だ。

1事実1箇所にして、そこを更新し、
更新するときは排他制御し、
論理的に一貫性をたもつため、トランザクションという
概念を導入し、関連あるデータを全部更新してあるか、
まったく更新していないかの状態にする。

このとき、1事実1箇所にするテクニックとして、
正規化が行われる。




■本当に1事実1箇所にする必要があるのか?

1事実1箇所にする根拠は、最新のデータを取得するため
とディスク容量を減らすためが主な理由におもわれる。

ディスクの価格が安くなったので、後者については、
考えないこととする。

問題は、1箇所更新したら、すぐに他のところにも
反映されることを実現するために1事実1箇所にする
必要があるか?ということだ。




■1事実が複数にあっても、ここが最新と決めればよいのでは?

具体的な例を挙げよう。

受注データを考える。
これは、商品データも含んでいる。
RDBの場合、商品コードと結び付けるため、商品名は受注データに
含めない(第三正規形)。

しかしここで、受注データの中に、商品コード、商品名、単価など、
必要なすべての条件を持ったらどうなるだろうか
そして、商品データについては、商品マスタが常に最新に更新されている
とする。

最新の商品データが欲しいときは、商品コードを使ってJOIN
すればいい。
そうでないときは、自分が持っているデータを表示すればいい。

問題はない。

いままでは商品コードだけだったけど、今度は付随してデータを
持っているだけの話だ。大は小をかねる

ここが最新と決めれば、最新情報が欲しいときは、いままでどおり
JOINすればいい。




つぎに、単一障害点の問題がある。これについては、またこんど。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする