관계형 데이터 모델링 노트
정규화(Normalization)와 데이터 통합화(Generalization)는 모델링의 꽃이다. 데이터의 본질을 파악하여 분해하는 첫 번째 단계가 정규화며, 분해된 데이터를 묶는 마지막 단계가 통합화다. 통합하기 위해서는 우선 개별 데이터의 성격이 명확해야 한다. 모델링의 처음과 끝이 정규화와 통합화다.
 
정규형(Normal Form)을 산(山)의 정상에 비유할 수 있다. 산의 정상에 오르기 위해서는 많은 노력이 필요하듯이, 완전한 정규형 모델을 구축하려면 많은 노력이 든다. 데이터를 이해하는 과정은 쉽지 않은 과정이다. 반면 비정규화는 정상에서 내려오는 과정이다. 비정규화는 정규화에 비해 수월하게 수행할 수 있다. 이미 데이터를 완전히 이해한 상태에서 비정규화를 수행하므로 하산하는 것과 같이 많은 노력이 들지 않는다.
 
정규화(Normalization)를 정확히 수행할 수 있고, 데이터를 통합(Generalization)할 수 있다면 좋은 모델을 만들 수 있다.

01 엔터티 이야기
1.1. 집합(Set)과 엔터티(Entity) 
1.2. 엔터티에 대한 서설(序說) 
1.3. 엔터티 정의(Definition)가 왜 중요한가? 
1.4. 엔터티 분류법 
1.5. 엔터티 정의 방법. 보이는 것인가? 
1.6. 엔터티 정의 방법. 스스로 존재하는가? 자립 엔터티와 종속 엔터티 
1.7. 종속 엔터티의 종류 
1.8. 모델(ERD)과 메타 시스템의 속성 설명 
1.9. 엔터티 정의 방법. 원천 데이터인가? 
1.10. 데이터 본질에 따른 엔터티 분류법(실체/행위/가공/기준) 
1.11. 실체 엔터티란? 
1.12. 행위 엔터티란? 
1.13. 가공 엔터티란? 
1.14. 기준 엔터티란? 
1.15. 엔터티 정의 방법. 데이터 생성에 따른 분류법 
1.16. 엔터티 정의 방법. 엔터티 유형에 따른 분류법 
1.17. 교차 엔터티(Association Entity)란? 
1.18. 엔터티 설계 원칙 
1.19. 엔터티명은 어떻게 정하는가? 
1.20. 다양한 엔터티에 대한 명명법(命名法) 
1.21. 엔터티 설명(Explanation)은 어떻게 기술하는가? 
1.22. 개념 모델에 포함하는 주요(Primary) 엔터티란? 
1.23. 엔터티 정의의 또 다른 이름. 업무 식별자(Business Identifier) 
1.24. 업무 식별자 도출 방법 
1.25. 업무 식별자 표현 방법 
1.26. 데이터 모델을 검증할 수 있는가? 
1.27. 엔터티 검증(Entity Review) 
1.28. 데이터 모델 설계 원칙 
1.29. 무결성(Integrity)에 대해서 
1.30. 성능에 대해서 
 

02 정규화 이야기
2.1. 정규화에 대한 서설(序說) 
2.2. 정규화(Normalization)란? 
2.3. 함수 종속(Functional Dependency)이란? 
2.4. 결정자(Determinant) & 종속자(Dependent) 
2.5. 함수 종속과 폐포(Closure) 
2.6. 함수 종속과 정규화 
2.7. 그냥 릴레이션과 비정규형 릴레이션 
2.8. 등산과 정규화 
2.9. 정규화를 하면 좋아지는 게 무엇인가? 
2.10. 아노말리(Anomaly)란? 
2.11. 정규형의 종류 
2.12. 1정규화와 원자(ATOM) 값 
2.13. 1정규화의 대상 
2.14. 1정규형과 비정규형 
2.15. 2정규형 
2.16. 2정규형 위반인가? 
2.17. 3정규형 
2.18. BC정규형 
2.19. 4정규형 
2.20. 5정규형 
2.21. 정규화 요약 
2.22. 3정규화까지만 수행하면 된다? 
2.23. 정규형과 성능?
 

03 데이터 통합과 서브타입 이야기
3.1. 데이터 통합에 대한 서설(序說) 
3.2. 일반화(Generalization)와 상세화(Specialization) 
3.3. 데이터 통합과 엔터티 통합 
3.4. 통합이 대세인가? 통합 시 주의할 점 
3.5. 어떤 경우에 통합을 고려하는가? 
3.6. 데이터 통합이 어려운 또 다른 이유 
3.7. 데이터 주제 영역(Subject Area)이란? 
3.8. 주제 영역 설계 방법 
3.9. 데이터 오너십(Data Ownership)과 모델 오너십(Model Ownership) 
3.10. 데이터 통합의 시발점 
3.11. 데이터 통합과 정규화 
3.12. 통합과 합체 
3.13. 주 식별자가 다른 엔터티의 통합 
3.14. 서브타입에 대한 서설(序說) 
3.15. 서브타입(Subtype)과 부분집합(Subset) 
3.16. 서브타입은 어떻게 도출하는가? 
3.17. 왜 서브타입을 사용하는가? 
3.18. 한 엔터티에 서브타입이 여러 개 존재한다? 
3.19. 서브타입과 코드 
3.20. ‘Is-A’ 서브타입과 ‘Part-Of’ 서브타입 
3.21. 배타 서브타입(Exclusive Subtype) & 중복 서브타입(Inclusive Subtype) 
3.22. 배타 서브타입과 이력 데이터 
3.23. 중복 서브타입에 대한 설계 
3.24. 중복 서브타입의 주의점 
3.25. 완전(Complete) 서브타입 & 불완전(Incomplete) 서브타입 
3.26. 서브타입과 슈퍼타입의 관계 
3.27. 서브타입의 오해 ? 슈퍼타입과 서브타입은 부모 자식 관계다 
3.28. 슈퍼타입서브타입 논리 모델의 물리 모델 변환 
3.29. 서브타입 모델의 물리 모델 변환 - 서브타입별로 엔터티 분할 
3.30. 서브타입 모델의 물리 모델 변환 - 슈퍼타입 엔터티로 통합 
3.31. 서브타입 모델의 물리 모델 변환 - 슈퍼타입서브타입 개별 생성 
3.32. 서브타입 모델의 물리 모델 변환 - 슈퍼타입서브타입 개별 생성(배타 관계) 
3.33. ERWin 툴의 서브타입 표기법 
3.34. 중첩 서브타입(Nested Subtype) 
3.35. 서브타입 간의 관계 표현법 
3.36. 잘못된 서브타입 
3.37. 범주에 대해서 
 

04 속성 이야기
4.1. 속성에 대한 서설(序說) 
4.2. 식별자(Key) 속성 & 비식별자(Non-Key) 속성 
4.3. 식별자 종류 ? 후보 식별자(Candidate Identifier) 
4.4. 식별자 종류 ? 주 식별자(Primary Identifier) 
4.5. 주 식별자가 바뀌는 현상 
4.6. 어떤 속성을 주 식별자로 선택해야 하는가? 
4.7. 주 식별자를 단순하게 설계해야 하는 이유 
4.8. 주 식별자 선정 절차 
4.9. 복잡한 주 식별자 
4.10. 복합 주 식별자의 속성 순서 
4.11. 교차 엔터티의 주 식별자 
4.12. 사원 엔터티의 주 식별자와 사원의 정의에 대해서 
4.13. 식별자 종류 ? 인조 식별자(Artificial Identifier) 
4.14. 인조 식별자를 사용해야 좋을 때 
4.15. 업무 식별자와 인조 식별자의 혼합 
4.16. 식별자 종류 ? 대리 식별자(Alternate Identifier) 
4.17. 식별자 종류 ? 슈퍼 식별자(Super Identifier) 
4.18. 속성 종류 ? 기초 속성(Basic Attribute) 
4.19. 속성 종류 ? 관계 속성(Relationship Attribute) 
4.20. 속성 종류 ? 추출 속성(Derived Attribute) 
4.21. 속성 종류 ? 시스템 속성(System Attribute) 
4.22. 추출 속성의 종류 ? 중복 속성(Redundant Attribute) 
4.23. 시점 데이터가 중복 속성이다? 
4.24. 중복 속성을 사용할 수 있는 경우 
4.25. 단일 값(Single-Valued) 속성 & 다가(Multivalued) 속성 
4.26. 단순(Simple) 속성 & 복합(Composite) 속성 
4.27. 필수(Required) 속성 & 선택(Optional) 속성 
4.28. 배타 속성(Exclusive Attribute) 
4.29. 코드(Code) 속성과 비코드(Non-Code) 속성 
4.30. 일반 코드와 식별자 코드 
4.31. 식별자 코드와 일반 코드의 관리 
4.32. 식별자 코드와 일반 코드의 상호 변환 
4.33. 통합 코드로 설계할지 개별 엔터티로 설계할지? 
4.34. 코드 속성의 명명법 
4.35. 코드 인스턴스(집합) 설계 원칙 
4.36. 코드를 사용하는 용도 
4.37. 코드 엔터티와 참조 무결성 관계 
4.38. 통합 코드 엔터티 & 개별 코드 엔터티 
4.39. 일반적인 코드 모델 
4.40. 전체 코드의 부분집합을 관리하는 모델 
4.41. 코드 간 관계를 관리하는 코드 모델 
4.42. 출력 순서를 관리하는 코드 모델 
4.43. 코드 모델의 이력 관리 
4.44. 속성명은 어떻게 정하는가? 
4.45. 속성 설명 
4.46. 속성 표준화 
4.47. 도메인(Domain) 
4.48. 도메인과 메타 시스템 
4.49. 데이터 타입 선정 원칙과 절차 
4.50. 널(Null)에 대한 서설(序說) 
4.51. 널(Null)과 DBMS & 인덱스 
4.52. 널(Null) 사용법 & 특징 
4.53. 속성 검증(Attribute Review) 
 

05 관계 이야기
5.2. 관계선(Relationship Line)이 의미하는 것 
5.3. 관계를 설계할 때 고려할 사항 
5.4. 참조 무결성(Referential Integrity) 
5.5. 기준 엔터티의 참조 무결성 
5.6. 종속(Dependent) 관계와 참조(Referential) 관계 
5.7. 식별(Identifying) 관계와 비식별(Non-Identifying) 관계 
5.8. 종속참조 관계 그리고 식별비식별 관계 
5.9. 식별 관계와 비식별 관계를 채택하는 예외 경우 
5.10. 참조 관계의 주 식별자를 식별 관계로 상속한 경우 
5.11. 관계 속성 & 관계 엔터티 
5.12. 관계 엔터티의 특징 
5.13. 관계 엔터티 선택 기준 
5.14. 관계선의 구성 요소 
5.15. 관계 구성 요소 - 카디널러티(Cardinality) 
5.16. 카디널러티 분석 방법 
5.17. 관계 구성 요소 - 옵셔널러티(Optionality) 
5.18. 상위 엔터티의 옵셔널러티 
5.19. 카디널러티 & 옵셔널러티 표기법 
5.20. 관계 구성 요소 ? 관계 디그리(Relationship Degree) 
5.21. 관계 디그리와 주 식별자 
5.22. 관계 디그리의 댜앙한 설계 방법 
5.23. 관계명(Relationship Name) 
5.24. 관계명 붙이는 방법 
5.25. 관계명이 필요할 때와 필요 없을 때 
5.26. 일대일(:) 관계 
5.27. 일대일 관계와 이력 데이터 
5.28. 배타 관계(Exclusive Relationship) 
5.29. 주 식별자가 다른 엔터티의 배타 관계 
5.30. 순환 관계(Recursive Relationship) 
5.31. 순환 관계 카디널러티 
5.32. 순환 관계에서의 데이터 발생 규칙 
5.33. 분류 계층 모델 
5.34. 추출 관계(Derived Relationship) 
5.35. 양방향 관계 
5.36. 잘못 설계한 관계선 
5.37. 잘못 설계한 관계선의 다양한 예제 
5.38. 관계 검증(Relationship Review) 
 

06 이력 데이터 이야기
6.1. 이력 데이터(Altered Data)에 대한 서설(序說) 
6.2. 이력 데이터와 내역 데이터 
6.3. 이력 엔터티 설계 시점 
6.4. 이력 데이터를 설계하는 방법 
6.5. 이력 데이터를 설계하는 첫 번째 방법 
6.6. 이력 데이터를 설계하는 두 번째 방법 
6.7. 이력 데이터를 설계하는 세 번째 방법 
6.8. 이력 데이터를 설계하는 네 번째 방법 
6.9. 속성 단위의 이력 모델과 추출 속성 
6.10. 속성 그룹 단위로 이력 데이터를 설계하는 예제 
6.11. 이력 데이터를 설계하는 다섯 번째 방법 
6.12. 이력 데이터를 종 테이블로 설계하는 다양한 방법 
6.13. 함께 변경된 속성을 알아야 할 때 
6.14. 선분이력 
6.15. 선분이력의 종료일자 
6.16. 기간을 의미하는 종료 일자 
6.17. 이력 엔터티의 주 식별자 
6.18. 이력 엔터티 설계 절차 
6.19. 서브타입의 이력 모델 
6.20. 정정 데이터 
 

07 비정규화 이야기
7.1. 비정규화(Denormalization)에 대한 서설(序說) 
7.2. 비정규화 원칙 
7.3. 비정규형의 단점 
7.4. 비정규화 과정 
7.5. 비정규화 방법 - 역정규화(Reverse-Normalization) 
7.6. 비정규화 방법 - 엔터티 합체 
7.7. 비정규화 방법 - 엔터티 분해 
7.8. 비정규화 방법 - 요약(Summary) 엔터티 
7.9. 비정규화 방법 - 추출 속성 
7.10. 이전 값을 관리하는 모델을 설계하는 방법 
7.11. 비정규화 방법 - 추출 엔터티 
7.12. 비정규화 방법 - 반복 속성 
7.13. 비정규화 방법 - 중복 데이터 
​