新品価格 |
[書評]SQLアンチパターン4章を読んだ
の続編
5章はEAV。
エンティティアトリビュートバリューの略。
なんのこっちゃかは本書を読んで理解しました
以下、SQL
・EAVのテーブル
id key value みたいなイメージで
1, name, masterka
1, reported, 2016
1, ikemen, true
みたいなテーブル。
・このパターンの問題点
select文どうするの
reportedを必須にしてくたもできない
reportedの型を指定できない。bananaとかも入る
外部キーが使えない
keyの名前揺れ問題
等問題が多すぎる。
・EAV使いたかったら
cassandraとか
mongodbとか
hadoopとか
redis等の
リレーショナルDBでないものを使いましょう。
この章のテーブル構成見てそう思った
・解決策1
あえてリレーショナルDBでやる場合
列を増やしまくって冗長なテーブルを1つにする
確かにこれが単純で一番わかりやすい
・解決策2
データごとにテーブルを複数作る。
これも単純
・解決策3
共通テーブル1つと
クラスごとに必要なデータを別テーブルにして
joinする。
共通テーブルは外部キー持つだけ
・解決策4
テーブルのカラムの一つをjson等にする等
デメリットとしては検索キーとしては使えなくなる
本章も非常に面白かったです。
そういえばこういうイケテナイDB考えますよね
そういうときはmysql使うわない選択肢もあるわけだ。
redisかcassandraやっぱり勉強しようかな
まだまだ続く
タグ:SQL