목차

옮긴이의 글
한국어판 지은이의 글

 

1장 개요

1.1 대상 독자
1.2 이 책에 있는 내용
1.3 이 책에 없는 내용
1.4 일러두기
1.5 예제 데이터베이스
1.6 감사의 글

 

2장 무단횡단

2.1 목표: 다중 값 속성 저장
2.2 안티패턴: 쉼표로 구분된 목록에 저장
2.3 안티패턴 인식 방법
2.4 안티패턴 사용이 합당한 경우
2.5 해법: 교차 테이블 생성

 

3장 순진한 트리

3.1 목표: 계층구조 저장 및 조회하기
3.2 안티패턴: 항상 부모에 의존하기
3.3 안티패턴 인식 방법
3.4 안티패턴 사용이 합당한 경우
3.5 해법: 대안 트리 모델 사용

 

4장 아이디가 필요해

4.1 목표: PK 관례 확립
4.2 안티패턴: 만능키
4.3 안티패턴 인식 방법
4.4 안티패턴 사용이 합당한 경우
4.5 해법: 상황에 맞추기

 

5장 키가 없는 엔트리

5.1 목표: 데이터베이스 아키텍처 단순화
5.2 안티패턴: 제약조건 무시
5.3 안티패턴 인식 방법
5.4 안티패턴 사용이 합당한 경우
5.5 해법: 제약조건 선언하기

 

6장 엔터티-속성-값

6.1 목표: 가변 속성 지원
6.2 안티패턴: 범용 속성 테이블 사용
6.3 안티패턴 인식 방법
6.4 안티패턴 사용이 합당한 경우
6.5 해법: 서브타입 모델링

 

7장 다형성 연관

7.1 목표: 여러 부모 참조
7.2 안티패턴: 이중 목적의 FK 사용
7.3 안티패턴 인식 방법
7.4 안티패턴 사용이 합당한 경우
7.5 해법: 관계 단순화

 

8장 다중 칼럼 속성

8.1 목표: 다중 값 속성 저장
8.2 안티패턴: 여러 개의 칼럼 생성
8.3 안티패턴 인식 방법
8.4 안티패턴 사용이 합당한 경우
8.5 해법: 종속 테이블 생성

 

9장 메타데이터 트리블

9.1 목표: 확장 적응성 지원
9.2 안티패턴: 테이블 또는 칼럼 복제
9.3 안티패턴 인식 방법
9.4 안티패턴 사용이 합당한 경우
9.5 해법: 파티션과 정규화

 

10장 반올림 오류

10.1 목표: 정수 대신 소수 사용
10.2 안티패턴: FLOAT 데이터 타입 사용
10.3 안티패턴 인식 방법
10.4 안티패턴 사용이 합당한 경우
10.5 해법: NUMERIC 데이터 타입 사용

 

11장 31가지 맛

11.1 목표: 칼럼을 특정 값으로 제한하기
11.2 안티패턴: 칼럼 정의에 값 지정.
11.3 안티패턴 인식 방법
11.4 안티패턴 사용이 합당한 경우
11.5 해법: 데이터로 값을 지정하기

 

12장 유령 파일

12.1 목표: 이미지 또는 벌크 미디어 저장
12.2 안티패턴: 파일을 사용해야 한다고 가정한다
12.3 안티패턴 인식 방법
12.4 안티패턴 사용이 합당한 경우
12.5 해법: 필요한 경우에는 BLOB 데이터 타입을 사용하라

 

13장 인덱스 샷건

13.1 목표: 성능 최적화
13.2 안티패턴: 무계획하게 인덱스 사용하기
13.3 안티패턴을 인식하는 방법
13.4 안티패턴 사용이 합당한 경우
13.5 해법: 인덱스를 MENTOR하라

 

14장 모르는 것에 대한 두려움

14.1 목표: 누락된 값을 구분하기
14.2 안티패턴: NULL을 일반 값처럼 사용
14.3 안티패턴 인식 방법
14.4 안티패턴 사용이 합당한 경우
14.5 해법: 유일한 값으로 NULL을 사용하라

 

15장 애매한 그룹

15.1 목표: 그룹당 최댓값을 가진 행 얻기
15.2 안티패턴: 그룹되지 않은 칼럼 참조
15.3 안티패턴 인식 방법
15.4 안티패턴 사용이 합당한 경우
15.5 해법: 칼럼을 모호하게 사용하지 않기

 

16장 임의의 선택

16.1 목표: 샘플 행 가져오기
16.2 안티패턴: 데이터를 임의로 정렬하기
16.3 안티패턴 인식 방법
16.4 안티패턴 사용이 합당한 경우
16.5 해법: In No Particular Order

 

17장 가난한 자의 검색 엔진

17.1 목표: 전체 텍스트 검색
17.2 안티패턴: 패턴 매칭 사용
17.3 안티패턴 인식 방법
17.4 안티패턴 사용이 합당한 경우
17.5 해법: 작업에 맞는 올바른 도구 사용하기

 

18장 스파게티 쿼리

18.1 목표: SQL 쿼리 줄이기
18.2 안티패턴: 복잡한 문제를 한 번에 풀기
18.3 안티패턴 인식 방법
18.4 안티패턴 사용이 합당한 경우
18.5 해법: 분할해서 정복하기

 

19장 암묵적 칼럼

19.1 목표: 타이핑 줄이기
19.2 안티패턴: 지름길만 좋아하면 길을 잃는다
19.3 안티패턴 인식 방법
19.4 안티패턴 사용이 합당한 경우
19.5 해법: 명시적으로 칼럼 이름 지정하기

 

20장 읽을 수 있는 패스워드

20.1 목표: 패스워드를 복구하거나 재설정하기
20.2 안티패턴: 패스워드를 평문으로 저장하기
20.3 안티패턴 인식 방법
20.4 안티패턴 사용이 합당한 경우
20.5 해법: 패스워드의 소금 친 해시

 

21장 SQL 인젝션

21.1 목표: 동적 SQL 쿼리 작성하기
21.2 안티패턴: 검증되지 않은 입력을 코드로 실행하기
21.3 안티패턴 인식 방법
21.4 안티패턴 사용이 합당한 경우
21.5 해법: 아무도 믿지 마라

 

22장 가상키 편집증

22.1 목표: 데이터 정돈하기
22.2 안티패턴: 모든 틈 메우기
22.3 안티패턴 인식 방법
22.4 안티패턴 사용이 합당한 경우
22.5 해법: 극복하라

 

23장 나쁜 것 안 보기

23.1 목표: 코드를 적게 작성하기
23.2 안티패턴: 짚 없이 벽돌 만들기
23.3 안티패턴 인식 방법
23.4 안티패턴 사용이 합당한 경우
23.5 해법: 에러에서 우아하게 복구하기

 

24장 외교적 면책특권

24.1 목표: 관례 따르기
24.2 안티패턴: SQL을 2등 시민으로 만들기
24.3 안티패턴 인식 방법
24.4 안티패턴 사용이 합당한 경우
24.5 해법: 초당적 품질 문화 확립

 

25장 마법의 콩

25.1 목표: MVC에서 모델 단순화하기
25.2 안티패턴: 액티브 레코드인 모델
25.3 안티패턴을 인식하는 방법
25.4 안티패턴 사용이 합당한 경우
25.5 해법: 액티브 레코드를 가지는 모델

 

부록 A 정규화 규칙

A.1 관계형의 뜻
A.2 정규화에 대한 미신
A.3 정규화란?
A.4 상식

 

부록 B 참고문헌