- 프로젝트, 명세서 등의 정보 요구사항에 대한 정확한 이해
- 분석자, 개발자, 사용자 간의 원활한 의사소통 수단
- 데이터 중심의 분석 방법
- 현행 시스템만이 아닌 신규 시스템 개발의 기초 제공
- 데이터베이스에 대한 사용자의 요구사항을 수집하고 분석해서 요구사항 기능 명세서를 작성
- 작성한 요구사항 명세서에서 데이터베이스를 구성하는데 필요한 개체, 속성, 개체 간의 관계를 추출하여 ERD를 생성
1. 개체와 속성을 추출한다.
a. 대부분 명사로 선별한다.
2. 개체 간의 관계를 추출한다.
a. 대부분 동사로 선별한다.
b. 관계에 속한 속성도 있을 수 있다.
c. 1:1, 1:N, N:M
d. 필수적인 참여, 선택적인 참여
- 요구사항에서 개체는 대부분 명사로 이루저여 있지만, 속성과 구별하여 추출한다.
- 개체 간의 관계는 여러가지로 분류해서 정의된다.
- 모든 개쳬는 릴레이션(Table)으로 변환
- N:M 관계는 릴레이션으로 변환
- 1:N 관계는 외래키로 표현
- 1:1 관계는 외래키로 표현
- 다중 값 속성은 독립 릴레이션으로 변환
- 일반적으로 1:N 관계에서 1측 개체의 기본키를 N측 릴레이션에 포함시키고 외래키(FK)로 지정
- 일반적 1:1 관계는 외래키(FK)를 서로 주고 받는다.
- 릴레이션에서는 다중 값 속성으로 가질 수 없으므로 다중값 속성은 별도의 릴레이션으로 생성해야 함.
- ERD를 실제 테이블로 생성한다.(Workbench 같은 DB Tool이나 SQL 스크립트 사용으로도 가능해야 함)
정규화된 엔티티타입, 속성, 관계를 시스템의 성능 향상, 개발과 운영의 단순화를 위해 모델을 통합하는 프로세스
** 정규화 모델 **
- SQL 작성이 용이하지 않고 과다한 테이블 조인이 발생하여 성능이 저하될 가능성이 높다.
** 반정규화 모델 **
- 같은 데이터가 여러 테이블에 걸쳐 존재하므로 무결성이 깨질 우려가 있다.
- 하지만 성능을 더 중시한다면 고려해 볼 만한 선택지.
- 1:1 관계의 테이블 병합
- 1:N 관계의 테이블 병합
- 슈퍼/서브 타입 테이블 변환
- 수직 분할(집중화된 일부 컬럼을 분리)
- 수평 분할(행으로 구분하여 구간별 분리)
- 테이블 추가(중복 테이블, 통계 테이블, 이력 케이블, 부분 테이블)
- 중복 컬럼 추가(자주 조회하는 컬럼이 있는 경우)
- 파생 컬럼 추가(미리 계산한 값)
- PK에 의한 컬럼 추가
- 응용시스템 오작동을 위한 컬럼 추가(이전데이터 임시 보관)
- 중복 관계 추가(이미 A 테이블에서 C 테이블의 정보를 읽을 수 있는 관계가 있음에도 관계를 중복하여 조회 경로를 단축)
정답은 정해져 있지 않고 그때그떄 다르다. 개념을 잘 알고 있어야 적절하게 쓸 수 있다.