SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです
目的
- 可変属性をサポートする
アンチパターン
- 汎用的な属性テーブルを使用する
- 属性を取得するにはどうするか
- データ整合性をどう保つか
用いてもいいパターン
- 簡単には見つからない
解決策
- 非リレーショナルなデータが欲しいのであれば、非リレーショナルな技術を使うべきである
シングルテーブル継承(STI:Single Table Inheritance)
- 1つのテーブルにサブタイプを全部入れてしまう
- Active Record のような単一テーブルに対するデータベースアクセスパターンを使うときに有効
具象テーブル継承
UNION
クラステーブル継承(CTI)
- 基底テーブルを用意し、サブテーブルには必要な拡張をする属性だけを用意する
半構造化データ
- LOB列を追加。jsonやxml を利用する
- LOB列は、SQLではアクセスできない(絞り込みとかできない)
まとめ
メタデータは、メタデータのために用いましょう。
感想
- やっている箇所ありそう...
- STIは、Railsであれば...
- マーティンファウラーの名前がたくさん出てくる
- Postgresql にjson型があるけれど、どうなんだろう?