NoSQLとRDBの使い分けっていうのを、世の中ではしている(していく)わけなんだけど、
RDBが必要な理由を、これから何回かに分けて考えてみたい。
■RDBが必要な理由-一貫性の確保
RDBが必要な理由で第一に挙げられるのは、
一貫性の確保だ。
1事実1箇所にして、そこを更新し、
更新するときは排他制御し、
論理的に一貫性をたもつため、トランザクションという
概念を導入し、関連あるデータを全部更新してあるか、
まったく更新していないかの状態にする。
このとき、1事実1箇所にするテクニックとして、
正規化が行われる。
■本当に1事実1箇所にする必要があるのか?
1事実1箇所にする根拠は、最新のデータを取得するため
とディスク容量を減らすためが主な理由におもわれる。
ディスクの価格が安くなったので、後者については、
考えないこととする。
問題は、1箇所更新したら、すぐに他のところにも
反映されることを実現するために1事実1箇所にする
必要があるか?ということだ。
■1事実が複数にあっても、ここが最新と決めればよいのでは?
具体的な例を挙げよう。
受注データを考える。
これは、商品データも含んでいる。
RDBの場合、商品コードと結び付けるため、商品名は受注データに
含めない(第三正規形)。
しかしここで、受注データの中に、商品コード、商品名、単価など、
必要なすべての条件を持ったらどうなるだろうか
そして、商品データについては、商品マスタが常に最新に更新されている
とする。
最新の商品データが欲しいときは、商品コードを使ってJOIN
すればいい。
そうでないときは、自分が持っているデータを表示すればいい。
問題はない。
いままでは商品コードだけだったけど、今度は付随してデータを
持っているだけの話だ。大は小をかねる
ここが最新と決めれば、最新情報が欲しいときは、いままでどおり
JOINすればいい。
つぎに、単一障害点の問題がある。これについては、またこんど。
RDBが必要な理由を、これから何回かに分けて考えてみたい。
■RDBが必要な理由-一貫性の確保
RDBが必要な理由で第一に挙げられるのは、
一貫性の確保だ。
1事実1箇所にして、そこを更新し、
更新するときは排他制御し、
論理的に一貫性をたもつため、トランザクションという
概念を導入し、関連あるデータを全部更新してあるか、
まったく更新していないかの状態にする。
このとき、1事実1箇所にするテクニックとして、
正規化が行われる。
■本当に1事実1箇所にする必要があるのか?
1事実1箇所にする根拠は、最新のデータを取得するため
とディスク容量を減らすためが主な理由におもわれる。
ディスクの価格が安くなったので、後者については、
考えないこととする。
問題は、1箇所更新したら、すぐに他のところにも
反映されることを実現するために1事実1箇所にする
必要があるか?ということだ。
■1事実が複数にあっても、ここが最新と決めればよいのでは?
具体的な例を挙げよう。
受注データを考える。
これは、商品データも含んでいる。
RDBの場合、商品コードと結び付けるため、商品名は受注データに
含めない(第三正規形)。
しかしここで、受注データの中に、商品コード、商品名、単価など、
必要なすべての条件を持ったらどうなるだろうか
そして、商品データについては、商品マスタが常に最新に更新されている
とする。
最新の商品データが欲しいときは、商品コードを使ってJOIN
すればいい。
そうでないときは、自分が持っているデータを表示すればいい。
問題はない。
いままでは商品コードだけだったけど、今度は付随してデータを
持っているだけの話だ。大は小をかねる
ここが最新と決めれば、最新情報が欲しいときは、いままでどおり
JOINすればいい。
つぎに、単一障害点の問題がある。これについては、またこんど。