본문 바로가기

일상 Story/일상

전문가가 꼭 읽어야 할 데이터 모델링 책 ㅎㅎ

다시 모델링 책을 냈습니다.


많은 관심 부탁드립니다.


--


[도서소개]


관계형 데이터 모델링 프리미엄 가이드(이하 프리미엄가이드)가 많은 사랑을 받은 거 같습니다. 강의다 운 강의를 해본 적도 없고, 온라인에 글을 올려본 적도 없기 때문에 좋은 반응은 기대하지 않았 습니다. 관심과 격려를 주신 분들께 지면을 통해 다시 한번 감사 드립니다.


프리미엄가이드에 용기를 얻어, 하고 싶은 말을 조금 더 하려는 마음에 책을 다시 쓰기 시작했습니다. 유사한 내용인데도 불구하고 2년이 넘게 걸렸고, 역시 힘든 작업이었습니다.


지난 프리미엄가이드는 몇 가지 의도를 가지고 썼습니다. 우선 긴호흡으로 읽히도록 썼습니다. 다양 한 정보를 제공해 종합적으로 판단할 수 있도록 의도했습니다. 그리고 모델링과 관련된 내용은 모두 포함시켰습니다. 지면상 자세하게 설명하진 못했어도 전반적인 내용이 포함돼 있습니다.


이번에 새로 쓴 관계형 데이터 모델링 노트(이하 모델링노트)는 세 가지 의도를 가지고 썼습니다. 읽기 쉽고, 이해하기 쉽고, 찾아보기 쉽도록 했습니다. 주제를 작게 나누고, 블로그와 유사하게 편집해서 쉽게 읽히고 이해하기 쉽게 쓰려고 노력했습니다.


아쉽고도 다행인 점은 지면의 한계 때문에 프리미엄가이드의 내용을 전부 포함할 수 없었습니다. 프리미엄가이드의 1장(데이터 모델링에 대한 상념), 3장(개념 모델 & 논리 모델 & 물리 모델), 11장(모델링 방법론), 14장(물리적 요소)의 내용은 모델링노트에서 생략했습니다. 기반 개념과 방법론에 대해서는 생략하고 엔터티·속성·관계를 위주로 구성했습니다.


모델링노트의 특징은 분류법을 기반으로 설명했다는 점입니다. 분류하면 논리적이고 분석적으로 생각하게 돼서 이론을 정립하기 쉽습니다. 또한 서브타입·표준화·이력·코드 부분은 프리미엄 가이드보다 난이도가 높습니다.


크게 볼 때 각 주제의 내용은 프리미엄가이드와 유사합니다. 한 권만 소장하신다면 프리미엄 가이드를 추천합니다. 모델링과 관련된 전반적인 내용이 포함돼 있고, 초보자에게 더욱 적절합니다. 모델링노트는 전문가용이라고 자부합니다. 물론 초보자에게도 많은 도움이 될 것입니다. 특별히 초보자에게 부족한 체계적으로 생각하는 법을 배울 수 있다고 생각합니다.



[도서 목차]


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

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

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

04 속성 이야기
4.1. 속성에 대한 서설(序說) | 299
4.2. 식별자(Key) 속성 & 비식별자(Non-Key) 속성 | 300
4.3. 식별자 종류 – 후보 식별자(Candidate Identifier) | 302
4.4. 식별자 종류 – 주 식별자(Primary Identifier) | 303
4.5. 주 식별자가 바뀌는 현상 | 305
4.6. 어떤 속성을 주 식별자로 선택해야 하는가? | 307
4.7. 주 식별자를 단순하게 설계해야 하는 이유 | 318
4.8. 주 식별자 선정 절차 | 322
4.9. 복잡한 주 식별자 | 325
4.10. 복합 주 식별자의 속성 순서 | 330
4.11. 교차 엔터티의 주 식별자 | 334
4.12. 사원 엔터티의 주 식별자와 사원의 정의에 대해서 | 339
4.13. 식별자 종류 – 인조 식별자(Artificial Identifier) | 343
4.14. 인조 식별자를 사용해야 좋을 때 | 346
4.15. 업무 식별자와 인조 식별자의 혼합 | 349
4.16. 식별자 종류 – 대리 식별자(Alternate Identifier) | 353
4.17. 식별자 종류 – 슈퍼 식별자(Super Identifier) | 355
4.18. 속성 종류 – 기초 속성(Basic Attribute) | 357
4.19. 속성 종류 – 관계 속성(Relationship Attribute) | 359
4.20. 속성 종류 – 추출 속성(Derived Attribute) | 360
4.21. 속성 종류 – 시스템 속성(System Attribute) | 364
4.22. 추출 속성의 종류 – 중복 속성(Redundant Attribute) | 366
4.23. 시점 데이터가 중복 속성이다? | 368
4.24. 중복 속성을 사용할 수 있는 경우 | 370
4.25. 단일 값(Single-Valued) 속성 & 다가(Multivalued) 속성 | 372
4.26. 단순(Simple) 속성 & 복합(Composite) 속성 | 375
4.27. 필수(Required) 속성 & 선택(Optional) 속성 | 378
4.28. 배타 속성(Exclusive Attribute) | 379
4.29. 코드(Code) 속성과 비코드(Non-Code) 속성 | 382
4.30. 일반 코드와 식별자 코드 | 383
4.31. 식별자 코드와 일반 코드의 관리 | 386
4.32. 식별자 코드와 일반 코드의 상호 변환 | 390
4.33. 통합 코드로 설계할지 개별 엔터티로 설계할지? | 392
4.34. 코드 속성의 명명법 | 393
4.35. 코드 인스턴스(집합) 설계 원칙 | 395
4.36. 코드를 사용하는 용도 | 399
4.37. 코드 엔터티와 참조 무결성 관계 | 401 
4.38. 통합 코드 엔터티 & 개별 코드 엔터티 | 405
4.39. 일반적인 코드 모델 | 407
4.40. 전체 코드의 부분집합을 관리하는 모델 | 413
4.41. 코드 간 관계를 관리하는 코드 모델 | 419
4.42. 출력 순서를 관리하는 코드 모델 | 422
4.43. 코드 모델의 이력 관리 | 424
4.44. 속성명은 어떻게 정하는가? | 427
4.45. 속성 설명 | 430
4.46. 속성 표준화 | 432
4.47. 도메인(Domain) | 438
4.48. 도메인과 메타 시스템 | 441
4.49. 데이터 타입 선정 원칙과 절차 | 443
4.50. 널(Null)에 대한 서설(序說) | 447
4.51. 널(Null)과 DBMS & 인덱스 | 449
4.52. 널(Null) 사용법 & 특징 | 451
4.53. 속성 검증(Attribute Review) | 454 

05 관계 이야기 
5.1. 관계에 대한 서설(序說) | 461
5.2. 관계선(Relationship Line)이 의미하는 것 | 463
5.3. 관계를 설계할 때 고려할 사항 | 465
5.4. 참조 무결성(Referential Integrity) | 468
5.5. 기준 엔터티의 참조 무결성 | 473
5.6. 종속(Dependent) 관계와 참조(Referential) 관계 | 476
5.7. 식별(Identifying) 관계와 비식별(Non-Identifying) 관계 | 481
5.8. 종속•참조 관계 그리고 식별•비식별 관계 | 483
5.9. 식별 관계와 비식별 관계를 채택하는 예외 경우 | 487
5.10. 참조 관계의 주 식별자를 식별 관계로 상속한 경우 | 492
5.11. 관계 속성 & 관계 엔터티 | 495
5.12. 관계 엔터티의 특징 | 497
5.13. 관계 엔터티 선택 기준 | 505
5.14. 관계선의 구성 요소 | 508
5.15. 관계 구성 요소 - 카디널러티(Cardinality) | 509
5.16. 카디널러티 분석 방법 | 513
5.17. 관계 구성 요소 - 옵셔널러티(Optionality) | 517
5.18. 상위 엔터티의 옵셔널러티 | 518
5.19. 카디널러티 & 옵셔널러티 표기법 | 522
5.20. 관계 구성 요소 – 관계 디그리(Relationship Degree) | 528
5.21. 관계 디그리와 주 식별자 | 531
5.22. 관계 디그리의 댜앙한 설계 방법 | 534
5.23. 관계명(Relationship Name) | 536
5.24. 관계명 붙이는 방법 | 538
5.25. 관계명이 필요할 때와 필요 없을 때 | 542
5.26. 일대일(1:1) 관계 | 548
5.27. 일대일 관계와 이력 데이터 | 551
5.28. 배타 관계(Exclusive Relationship) | 553
5.29. 주 식별자가 다른 엔터티의 배타 관계 | 557
5.30. 순환 관계(Recursive Relationship) | 562
5.31. 순환 관계 카디널러티 | 566
5.32. 순환 관계에서의 데이터 발생 규칙 | 570
5.33. 분류 계층 모델 | 572
5.34. 추출 관계(Derived Relationship) | 576
5.35. 양방향 관계 | 581
5.36. 잘못 설계한 관계선 | 584
5.37. 잘못 설계한 관계선의 다양한 예제 | 589
5.38. 관계 검증(Relationship Review) | 599

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

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



[저자소개]


이메일 bluepupi@gmail.com, 블로그 http://dataprofessional.tistory.com


데이터 분야에서 15년째 일하고 있으며, 현재는 오픈메이드컨설팅에서 수석 컨설턴트로 근무하고 있다.

데이터 모델링(Data Modeling)과 DA(Data Architecture) 분야의 컨설팅을 수행하며, 특별히 풍부한 경험을 바탕으로 데이터 모델링을 직접 수행하는 것이 다른 컨설턴트와 다른 강점이다.

이론적 지식이 튼튼한 전문가가 컨설팅해야 한다는 생각을 가지고 있으며, 진정한 최고의 데이터 프로페셔널(Data Professional)이 되려고 노력하고 있다.

저서로는 ‘데이터베이스 활용을 위한 SQL Server 2000(2004년)’, ‘관계형 데이터 모델링 프리미엄 가이드(2010년)’가 있으며, ‘전사적 데이터 아키텍처 프레임웍에 대한 개념모델 개발(2007년)’ 논문을 발표했다.