제 1 정규화(1NF)
- 반복되는 그룹 속성이 존재할 경우 그룹을 분리하여 새로운 실체를 추가한 후 기존의 실체와 1:N의 관계를 형성함으로써 속성들의 원래 제자리를 찾아주는 것이다.
고객 ID | 수강강좌 |
aaa001 | 수영; 요가 |
▼
고객 ID | 수강강좌 |
aaa001 | 수영 |
aaa001 | 요가 |
▶ 테이블 내의 속성 값은 원자값을 가지고 있어야한다.
▶ 수강강좌가 속성에 2개 이상의 값을 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족
제 2 정규화(2NF)
- 복합키(Composit Primary Key)로 구성된 경우가 2차 정규화의 대상이 되며 복합키 전체에 의존하지 않고 복합키의 일부분에만 종속되는 속성들이 존재할 경우(즉, 부분적 함수 종속 관계가 존재할 경우)이를 제거시키는 것이다.
고객 ID | 서비스이름 | 서비스가격 | 서비스 이용시간 |
aaa001 | 헬스 | 70000 | 1달 |
aaa001 | 수영 | 100000 | 2달 |
aaa002 | 수영 | 100000 | 2달 |
▼
고객 ID | 서비스이름 | 서비스 이용시간 |
aaa001 | 헬스 | 1달 |
aaa001 | 수영 | 2달 |
aaa002 | 수영 | 2달 |
서비스이름 | 서비스가격 |
헬스 | 70000 |
수영 | 100000 |
▶ <고객ID, 서비스 이름>이 <서비스 이용 기간>에 영향을 주고, <서비스 이름>이 <서비스 가격>에 영향을 주는 관계를 부분 함수 종속 관계라고 한다.
▶ <고객ID, 서비스 이름, 서비스 가격, 서비스 이용 기간>을 한 테이블에 두는 것은 부분 함수 종속성으로 인해 2차 정규화를 만족하지 못한다.
▶ 부분 관계인<서비스 이름, 서비스 가격> 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거 되어 2차 정규화를 만족한다.
제 3 정규화(3NF)
- 키가 아닌 컬럼에 종속적인 속성이 존재할경우(즉 이행적 종속 관계가 존재할 경우) 이를 제거시키는 것이다.
책번호 | 도서 이름 | 도서 가격 | 출판사 | 홈페이지 |
1 | C언어 | 30000 | A사 | www.a.com |
2 | C++언어 | 25000 | B사 | www.b.com |
3 | JAVA언어 | 40000 | B사 | www.b.com |
▼
책번호 | 도서 이름 | 도서 가격 | 출판사 |
1 | C언어 | 30000 | A사 |
2 | C++언어 | 25000 | B사 |
3 | JAVA언어 | 40000 | B사 |
출판사 | 홈페이지 |
A사 | www.a.com |
B사 | www.b.com |
▶ <책번호>가 <출판사>에 영향을 주고, <출판사>가 <홈페이지>에 영항을 주는 관계인 A->B이고, B->C이면서
A->C관계가 같이 있는 경우를 이행 함수 종속관계라고 한다.
▶ <책번호, 출판사, 홈페이지>를 한 테이블에 두는 것은 이행함수 종속성으로 인해 3차 정규화를 만족하지 않는다.
▶ <책번호>는 <홈페이지>에 직접 영향을 주는 관계가 아니기 때문에 (A->C관계), <책번호, 출판사>테이블, <출판사, 홈페이지>테이블로 분리하여 이행함수 관계를 제거야하여 3차 정규화를 만족한다.
제 4 정규화(4NF)
- 다중화 값의 종속성 제거, 특정 속성 값에 따라 선택지인 속성을 분리한다.
개발자 | 자격증 | 언어 |
홍길도 | 정보처리기사 | C |
홍길동 | 빅데이터 분석 기사 | C++ |
장길산 | 정보처리기사 | JAVA |
▼
개발자 | 자격증 |
홍길동 | 정보처리기사 |
홍길동 | 빅데이터 분석 기사 |
장길산 | 정보처리기사 |
개발자 | 언어 |
홍길동 | C |
홍길동 | C++ |
장길산 | JAVA |
제 5정규화(5NF)
- 조인 종속성을 제거한다.
ER 모델
실세계에 존재하는 것 가운데, 데이타베이스로서 표현해야 할 대상물을 엔티티 (entity: 엔티티)라고 부릅니다. 또한 엔터티와 엔터티 간의 상호 관계를 관계(relationship: 관련)라고 합니다. 그리고 이 관계를 도시하고 엔티티와 엔티티 간의 관계를 분석하는 기법을 ER(Entity-Relationship) 모델이라고 합니다.
엔티티와 엔티티 간의 관계에는 다음과 같은 대응 관계가 있습니다.
1:1엔티티
A에 대해서는, 엔티티 B는 하나 밖에 존재하지 않고, 엔티티 B에 대해서도 엔티티 A는 하나 밖에 존재하지 않는 관계의 경우, 1:1의 대응이라고 합니다. 예를 들어, 엔티티 "학생"과 엔티티 "학생 번호"의 관계는 1:1입니다.
1:N엔티티
A 에 대해 엔티티 B 가 복수 존재하고 엔티티 B 에 대해서는 엔티티 A 가 하나 밖에 존재하지 않는 관계의 경우, 1:N 의 대응이라고 합니다. 예를 들어, 엔티티 "아버지"와 엔티티 "아이"의 관계는 1:N입니다.
M:N엔티티
A에 대해 엔티티 B가 복수 존재하고, 엔티티 B에 대해서도 엔티티 A가 복수 존재하는 관계의 경우, M:N 의 대응이라고 합니다. 예를 들어, 엔티티 "강의"와 엔티티 "수강생"의 관계는 M:N입니다.
'IT > DB' 카테고리의 다른 글
MariaDB UTF8 관련 Error 설정 (0) | 2024.08.02 |
---|---|
2021-10-15 SQL (0) | 2021.10.15 |