まとめてみた。
【テーブルを結合しない】
・どちらでもよい
【自己結合してしまう】
・NoSQLが向いている
・レコードレベルで、ツリー構造になっているはず。
複雑になると、RDBには向かない
(自己結合:
看護婦と婦長のように、同じテーブルのレコード内で親子関係があるため、
自分のテーブルを別名をつけて結合する)
【1対Nの多段階構造】
・NoSQLが向いているがRDBでもよい
・テーブルレベルでツリー構造になっているはず。
例:テスト→問題→選択肢のような関係で、問題を使いまわさない。
【1対Nが、2箇所から来ている、N対N】
・NoSQLだと、更新時に問題が出る
→が、それをクリアすれば良い
・RDBでJOINする
→遅くなる場合がある※
例:受注明細(受注1→受注明細N と 商品1→受注明細N の2箇所)
テスト→問題→選択肢のような関係で、問題を使いまわす。
※RDBで結合が遅くなる場合:対策
・マテリアライズド・ビューを使う(Oracleのみ)
→自分でマテリアライズド・ビューもどきをつくる
・クエリーキャッシュを使う
→自分でキャッシュしてがんばる
【テーブルを結合しない】
・どちらでもよい
【自己結合してしまう】
・NoSQLが向いている
・レコードレベルで、ツリー構造になっているはず。
複雑になると、RDBには向かない
(自己結合:
看護婦と婦長のように、同じテーブルのレコード内で親子関係があるため、
自分のテーブルを別名をつけて結合する)
【1対Nの多段階構造】
・NoSQLが向いているがRDBでもよい
・テーブルレベルでツリー構造になっているはず。
例:テスト→問題→選択肢のような関係で、問題を使いまわさない。
【1対Nが、2箇所から来ている、N対N】
・NoSQLだと、更新時に問題が出る
→が、それをクリアすれば良い
・RDBでJOINする
→遅くなる場合がある※
例:受注明細(受注1→受注明細N と 商品1→受注明細N の2箇所)
テスト→問題→選択肢のような関係で、問題を使いまわす。
※RDBで結合が遅くなる場合:対策
・マテリアライズド・ビューを使う(Oracleのみ)
→自分でマテリアライズド・ビューもどきをつくる
・クエリーキャッシュを使う
→自分でキャッシュしてがんばる