0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQLアンチパターン:EAV(エンティティ・アトリビュート・バリュー)

Posted at

SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです

目的

  • 可変属性をサポートする

アンチパターン

  • 汎用的な属性テーブルを使用する
  • 属性を取得するにはどうするか
  • データ整合性をどう保つか

用いてもいいパターン

  • 簡単には見つからない

解決策

  • 非リレーショナルなデータが欲しいのであれば、非リレーショナルな技術を使うべきである

シングルテーブル継承(STI:Single Table Inheritance)

  • 1つのテーブルにサブタイプを全部入れてしまう
  • Active Record のような単一テーブルに対するデータベースアクセスパターンを使うときに有効

具象テーブル継承

UNION

クラステーブル継承(CTI)

  • 基底テーブルを用意し、サブテーブルには必要な拡張をする属性だけを用意する

半構造化データ

  • LOB列を追加。jsonやxml を利用する
  • LOB列は、SQLではアクセスできない(絞り込みとかできない)

まとめ

メタデータは、メタデータのために用いましょう。

感想

  • やっている箇所ありそう...
  • STIは、Railsであれば...
  • マーティンファウラーの名前がたくさん出てくる
  • Postgresql にjson型があるけれど、どうなんだろう?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?