SQL AntiPatterns
Bill Karwin
2010
인사이트 2011 윤성준 번역
ISBN 978-89-6626-050-8
summary
logical db design
Jaywalking 무단횡단
obj: 다중값 속성 저장
a.p: 한 컬럼 내 쉼표로 저장
이슈 : 집계, 인덱싱, 참조, 길이제한, 구분자
해법: 별도 테이블에 저장
tip: 각 값은 자신의 칼럼과 행에 저장하라
naive trees
obj: 계층구조 (comment)
a.p: 인접목록(parent id)
issue: 모든 자식 조회가 어려움
해법: path enumeration(bread crumb), nested set, closure table(treepaths table)...
cf) using with CTE
ID required
obj: PK convention
a.p: id column (지나키게 일반적인 키이름 사용)
issue: dup key, 모호성
sol: meaningful pk name(bug_id)or combination key
tip: 관례는 도움이 될때만
keyless entry
obj: db 아키텍처 단순화
a.p: ignore constraint(app에서 해결)
issue: 정합성 보장 코드 작성 필요, 갱신충돌
sol: declare constration
EAV entity-attribute-value
obj: support variable attr
a.p: generic attr table(schemaless or name value pair)
issue: data type support, required attr, reference validation, rearrange column
sol: subtype modeling (single table, concrete sub tables, class table, semi-structured data;json text)
Polymorphic Associations
obj: Reference Multiple Parents (comment referncing bugs or FeatureRequest)
a.p: Use Dual-Purpose Foreign Key
issue: impossible FK
sol: simplify relations
(make cross table with unique key, make super table-issues table)
Multicolumn Attributes
obj: store multi value(tag1,tag2...)
a.p: add multi columns
issue: search value, add/delete, uniqueness, increase column
sol: dependent table (tags table)
physical db design
Rounding Errors
Obj: Use Fractional Numbers Instead of Integers
a.p: Use FLOAT Data Type
sol: NUMERIC or decimal type
31 Flavors
obj: Restrict a Column to Specific Values
a.p: Specify Values in the Column Definition
issue: porting, add new enum
sol: Specify Values in Data(index table-bugstatus)
query
NULL
is null
coalesce function
text search
obj: full text search
a.p: pattern matching(like, regexp..)
sol: datatype, operator for tts
(tsvector, @@ to_tsquery)
spagetti query
simple is best.
one by one
use union
feelings
생각보다 꽤 오래된 책이라 이후에 다시 개정된 안티패턴이 나오면 꼭 읽어보고싶다.
후반부의 application development antipattern은 업데이트가 필요.
intro
SQL AntiPatterns Bill Karwin 2010 인사이트 2011 윤성준 번역
ISBN 978-89-6626-050-8
summary
logical db design
Jaywalking 무단횡단 obj: 다중값 속성 저장 a.p: 한 컬럼 내 쉼표로 저장 이슈 : 집계, 인덱싱, 참조, 길이제한, 구분자 해법: 별도 테이블에 저장 tip: 각 값은 자신의 칼럼과 행에 저장하라
naive trees obj: 계층구조 (comment) a.p: 인접목록(parent id) issue: 모든 자식 조회가 어려움 해법: path enumeration(bread crumb), nested set, closure table(treepaths table)... cf) using with CTE
ID required obj: PK convention a.p: id column (지나키게 일반적인 키이름 사용) issue: dup key, 모호성 sol: meaningful pk name(bug_id)or combination key tip: 관례는 도움이 될때만
keyless entry obj: db 아키텍처 단순화 a.p: ignore constraint(app에서 해결) issue: 정합성 보장 코드 작성 필요, 갱신충돌 sol: declare constration
EAV entity-attribute-value obj: support variable attr a.p: generic attr table(schemaless or name value pair) issue: data type support, required attr, reference validation, rearrange column sol: subtype modeling (single table, concrete sub tables, class table, semi-structured data;json text)
Polymorphic Associations obj: Reference Multiple Parents (comment referncing bugs or FeatureRequest) a.p: Use Dual-Purpose Foreign Key issue: impossible FK sol: simplify relations (make cross table with unique key, make super table-issues table)
Multicolumn Attributes obj: store multi value(tag1,tag2...) a.p: add multi columns issue: search value, add/delete, uniqueness, increase column sol: dependent table (tags table)
physical db design
Rounding Errors Obj: Use Fractional Numbers Instead of Integers a.p: Use FLOAT Data Type sol: NUMERIC or decimal type
31 Flavors obj: Restrict a Column to Specific Values a.p: Specify Values in the Column Definition issue: porting, add new enum sol: Specify Values in Data(index table-bugstatus)
query
NULL is null coalesce function
text search obj: full text search a.p: pattern matching(like, regexp..) sol: datatype, operator for tts (tsvector, @@ to_tsquery)
spagetti query simple is best. one by one use union
feelings
생각보다 꽤 오래된 책이라 이후에 다시 개정된 안티패턴이 나오면 꼭 읽어보고싶다. 후반부의 application development antipattern은 업데이트가 필요.