데이터베이스 설계
데이터베이스 설계 단계
1단계 : 요구 사항 분석
- 수집한 요구 사항을 분석하여 그 결과를 요구 사항 명세서로 작성하는 단계
2단계 : 개념적 설계
- 명세서를 바탕으로 DBMS에 독립적인 개념적 데이터 모델으로 표현하는 단계
- 일반적으로 E-R 모델을 많이 사용한다
- 개체와 속성, 관계를 추출하고 E-R 다이어그램을 작성한다
3단계 : 논리적 설계
- 개념적 구조를 기반으로 적합한 DBMS를 선정하는 단계
- 관계 데이터 모델을 사용한다면 E-R 다이어그램을 릴레이션 스키마로 변환하는 작업을 수행한다
릴레이션 스키마 변환 규칙
규칙 1. 모든 개체는 릴레이션으로 변환한다
규칙 2. 다대다 관계는 릴레이션으로 변환한다
규칙 3. 일대다 관계는 외래키로 표현한다
- 일반적인 일대다 관계는 외래키로 표현한다
- 약한 개체가 참여하는 일대다 관계는 외래키를 포함해서 기본키로 지정한다
규칙 4. 일대일 관계는 외래키로 표현한다
- 일반적인 일대일 관계는 외래키를 서로 주고받는다
- 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받는다
- 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션 하나로 합친다
규칙 5. 다중 값 속성은 릴레이션으로 변환한다
4단계 : 물리적 설계
- 논리적 구조를 기반으로 데이터베이스의 물리적 구조를 설계하는 단계
- 저장 장치에 적합한 저장 레코드와 인덱스의 구조 등을 설계하고, 저장된 데이터와 인덱스에 빠르게 접근하게 할 수 있는 탐색 기법 등을 정의한다
- 응답 시간을 최소화하고 저장 공간을 효율적으로 활용하면서 데이터베이스 시스템의 처리 능력을 향상시킬 수 있도록 물리적 구조를 설계해야 한다
5단계 : 구현
- DBMS에서 SQL로 작성한 명령문을 실행하여 데이터베이스를 생성하는 단계
정규화
정규화의 개념과 이상 현상
이상(anomaly) 현상
정의 : 데이터베이스를 잘못 설계 했을 때, 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때 생기는 부작용
종류
1. 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
2. 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
3. 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
이상 현상이 발생하는 이유?
관련 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문
이상 현상이 일어나지 않도록 하려면?
정규화를 통해, 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해해야 한다
함수 종속
X -> Y
위의 식에서 X 는 결정자이고 Y 는 종속자이다
X가 Y를 함수적으로 결정하며, Y는 X에 함수적으로 종속되어 있다
고객아이디 -> 고객이름
{고객아이디, 이벤트번호} -> 당첨여부
{고객아이디, 이벤트번호} -> 고객이름
위의 함수 종속 관계에서 고객이름은 {고객아이디, 이벤트번호} 와 그 일부분인 고객아이디에 둘 다 종속되어 있다
이런 경우, 고객이름 속성이 {고객아이디, 이벤트번호} 속성 집합에 부분 함수 종속되었다고 한다
반면, 당첨여부 속성은 {고객아이디, 이벤트번호} 의 일부분이 아닌 속성 집합 전체에 종속되어 있다
이런 경우, 당첨여부 속성이 {고객아이디, 이벤트번호} 속성 집합에 완전 함수 종속되었다고 한다
완전 함수 종속 FFD : Full Functional Dependency
릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X 전체에 종속된 것이지 일부분에 종석된 것이 아니다
위의 그림에서는 성적이 해당된다
부분 함수 종속 PFD : Partial Functional Dependency
속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미하므로, 부분 함수 종속 관계가 성립하려면 결정자가 여러 개의 속성들로 구성되어 있어야 한다
위의 그림에서는 학년이 해당된다
기본 정규형과 정규화 과정
정규화 : 함수 종속성을 이용하여 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어나가는 과정
제1 정규형 ( 1NF : First Normal Form )
릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제1 정규형에 속한다
즉, 다중 값을 가지는 속성을 포함한 릴레이션은 제1 정규형에 속하지 않는다
문제점
릴레이션이 부분 함수 종속을 포함하고 있기 때문에 다양한 이상 현상이 발생한다
제2 정규형 ( 2NF : Second Normal Form )
릴레이션이 제1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2 정규형에 속한다
즉, 부분 함수 종속을 가지는 릴레이션은 제2 정규형에 속하지 않는다
문제점
릴레이션이 이행적 함수 종속을 포함하고 있기 때문에 다양한 이상 현상이 발생한다
제3 정규형 ( 3NF : Third Normal Form )
릴레이션이 제2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3 정규형에 속한다
즉, 이행적 함수 속성을 가지는 릴레이션은 제3 정규형에 속하지 않는다
문제점
현실에서는 하나의 릴레이션에 여러개의 후보키가 존재할 수도 있는데, 이 경우에는 제3 정규형까지 모두 만족하더라도 이상 현상이 발생할 수 있다
보이스/코드 정규형 ( BCNF : Boyce/Codd Normal Form )
릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다
후보키를 여러 개 가지고 있는 릴레이션에서의 이상 현상을 해결하기 위해 제3 정규형보다 좀 더 엄격한 제약조건을 제시한다
강한 제3 정규형이라고도 한다
위의 그림과 같은 상황을 아래와 같이 변형시킨다
제4 정규형과 제5 정규형
제4 정규형 : 릴레이션이 보이스/코드 정규형을 만족하면서 함수 종속이 아닌 다치 종속을 제거해야 한다
제5 정규형 : 릴레이션이 제4 정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다
PS
데이터베이스 개론 2판, 한빛아카데미, 김연희 저
'독서' 카테고리의 다른 글
[개발자를 위한 인덱스 생성과 SQL 작성 노하우] 오라클 블록 옵션 (0) | 2022.03.16 |
---|---|
[데이터베이스 개론] 회복과 병행 제어 (0) | 2022.03.15 |
[데이터베이스 개론] 데이터베이스 언어 SQL (0) | 2022.03.11 |
[데이터베이스 개론] 데이터 모델과 연산 (0) | 2022.03.07 |
[데이터베이스 개론] 데이터베이스 기초 이론 (0) | 2022.03.06 |