Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SQL antipatterns #5
Search
grimrose
June 22, 2013
Programming
0
3.2k
SQL antipatterns #5
SQLアンチパターン読書会 「EAV(エンティティ・アトリビュート・バリュー)」
grimrose
June 22, 2013
Tweet
Share
More Decks by grimrose
See All by grimrose
だいたい10分くらいで 知った気になれる Vert.x 3.0 #渋谷Java / Shibuya.java #11
grimrose
0
1.7k
Syobochim should read book of modeling #syoboben
grimrose
0
1.6k
Gradleで始めるGroovy expand #jjug_ccc #ccc_r14
grimrose
4
5.6k
I wanna tell you about "Groovy Template"
grimrose
3
5.2k
Groovy Shell with Gradle
grimrose
0
5k
Shibuya.Java #07
grimrose
0
710
Ambiguous Groups #sqlap
grimrose
0
810
ぼっちプロジェクトとアジャイルサムライ
grimrose
0
210
Shibuya.Java #04
grimrose
1
560
Other Decks in Programming
See All in Programming
Tailwind CSSを本気でカスタマイズする方法
fsubal
2
250
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
470
ONE WEDGE_company_guide
1wedge_one
0
380
Site Reliability Engineering for GMO
pyama86
6
940
Doctrine ORMでValue Objectを扱う方法4選 #phpstudy / 4 ways to handle Value Objects with Doctrine ORM
77web
4
110
Ruby Pattern Matching
bkuhlmann
0
920
PostmanでAPIの動作確認が楽になった話
h455h1
0
130
Elm Form Validation
bkuhlmann
0
500
try! Swift Tokyo 初参加報告LT
hinakko2
0
190
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
3
770
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
340
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
490
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
15
1.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
19
1.9k
RailsConf 2023
tenderlove
2
530
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
154
14k
The Mythical Team-Month
searls
215
42k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
273
13k
How to train your dragon (web standard)
notwaldorf
72
5.1k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Statistics for Hackers
jakevdp
789
220k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
What's new in Ruby 2.0
geeforr
337
31k
Building Flexible Design Systems
yeseniaperezcruz
318
37k
Transcript
SQLアンチパターン読書会 5章 「EAV(エンティティ・アトリビュート・バリュー)」 2013/06/27 @grimrose
章構成 • 目的 ◦ 可変属性をサポートする • アンチパターン ◦ 汎用的な属性テーブルを使用する ▪
属性を取得するにはどうするか ▪ データの整合性をどう保つのか ▪ 行を再構築しなければならない • アンチパターンの見つけ方 • アンチパターンを用いてもよい場合
章構成 • 解決策 ◦ サブタイプのモデリングを行う ▪ シングルテーブル継承 ▪ 具象テーブル継承 ▪
クラステーブル継承 ▪ 半構造化データ ▪ 後処理
EAVとは • エンティティ • 属性(アトリビュート) • 値(バリュー)
EAV issue_id attr_name attr_value 1234 product 1 1234 date_reported 2009-06-01
1234 status NEW 1234 description 保存処理に失敗する 1234 reported_by Bill 1234 version_affected 1.0 1234 severity 機能の損失 1234 priority HIGH IssueAttribytes
デメリット • 属性を取得するのが冗長 • 必須属性を設定できない • データ型を使えない • 参照整合性を強制できない •
属性名を補わなければならない • 行を再構築しなければならない
可変属性を使うには • NoSQL • サブタイプ
NoSQL • Key/Value型 • カラム指向型 • ドキュメント指向型 • etc...
サブタイプ • うまく機能するのは? ◦ サブタイプの数が限られる ◦ 開発者が各サブタイプの属性をよく知っている
シングルテーブル継承 • 属性を全て個別の列に格納
具象テーブル継承 • サブタイプ毎にテーブルを作成 • 基底型と固有の属性を含む
クラステーブル継承 • 基底型テーブルとサブタイプ毎にテーブルを追 加
ORM • 各テーブル継承をサポートしている場合も • Ruby ◦ ActiveRecord • PHP ◦
doctrine2 • Java ◦ JPA • Python ◦ SQLAlchemy
半構造化データ • その他の属性をBLOB、CLOB、TEXT型に格納
後処理 • 行の集合として取得し、アプリケーションで何と かする。
おわりに • メタデータは、メタデータのために使いましょう。