-
18. 데이터베이스 설계2개발자 수업/DB 2021. 11. 16. 18:00
1. 정규화(Normalization)의 개념
1) 관계형 데이터베이스의 설계에서 데이터 중복을 최소화하여 구조화하는 프로세스
2) 함수적 종속성을 이용해서 연관성 있는 속성들을 분류하고 각 릴레이션에서 이상현상이 생기지 않도록하는 과정
3) 함수적 종속성(FD) 등과 같은 이론에 근거하여 관계형 데이터베이스의 테이블의 삽입, 삭제, 갱신 이상(anomaly) 현상 발생을 최소화하기 위해 좀 더 작은 단위의 테이블로 설계하는 과정
- 조회 -> 처리조건에 따라 성능 향상 혹은 저하됨
- 입력/수정/삭제는 무조건 성능이 향상됨
2. 정규화의 목적
1) 불필요한 데이터를 제거, 데이터 중복을 최소화
2) 무결성 제약조건의 시행을 간단하게 하기 위해
3) 이상(anomaly) 현상을 방지하기 위해 테이블 구성을 논리적이고 직관적으로 만들기 위해
- 삭제 이상 (deletion anomaly)
: 튜플을 삭제함으로써 유지되어야 하는 정보까지도 연쇄적으로 삭제되는 경우
4) 이상 현상이 발생하는 원인
- 관련 없는 속성들을 다 모아서 하나의 릴레이션으로 만들었기 때문에
- 정규화를 통해 릴레이션을 관련이 있는 속성들로만 구성되는 작은 여러 개의 릴레이션으로 분해해야 함
- 속성들 간의 관련성 판단 : 함수적 종속성
- 하나의 릴레이션에는 하나의 함수적 종속성만 존재하도록 정규화를 함
3. 정규화 효과 및 장점
1) 상호 종속성이 강한 데이터 요소들을 분리, 독립된 개념(엔티티, 테이블)으로 정의를 하게 됨에 따라 high cohesion & loose coupling 원칙에 충실해짐
2) non key 데이터 요소의 중복이 최소화 됨
4. 함수적 종속성 (Functional Dependency : FD)
1) 릴레이션(Relation)의 속성(Attribute)들 사이의 관계를 표현
주로 기본키(primary key)와 다른 non key 속성들 사이의 관계를 표현
- 결정자(Determinant) : 함수적 종속성에서 기본키 속성(컬럼)을 결정자라 함
2) 함수적 종속성의 분석을 통해 정규화를 실행
3) 함수 : 입력 X의 경우 반드시 한 개의 출력 Y 결정
- 예) 통화 (달러) --> 환율
사원 아이디 --> 사원명
주민번호 --> 성명
학번 --> 소속학과
5. 정규형 (NF : Normal Form)
1) 정규화 결과에 의해 도출된 데이터 모델
6. 1NF (First Normal Form, 제1정규화, 제1정규형)
1) 릴레이션에 속한 속성들은 원자값(atomic value, 하나의 값)을 갖도록 해야 함
2) 복수의 속성값을 갖는 속성을 분리
3) 속성의 원자성 확보
4) 여러 값을 가지고 있는 경우 다른 릴레이션으로 분리함
7. 2NF (Second Normal Form, 제2정규화, 제2정규형)
1) 1NF를 만족하고 모든 Non-key 컬럼은 기본키 전체에 종속되어야 함
2) 기본키에 종속적이지 않거나 기본키 일부 컬럼(들)에만 종속적인 컬럼은 분리되어야 함
3) 함수적 종속성(Functional Dependency) 분석 (예)
- 주문일자 : 고객아이디와 주문순번으로 결정됨
-> 기본키를 구성하는 속성(열, 컬럼) 전부에 함수종속이 존재함
- 고객명 : 고객아이디로만 결정됨
-> 부분 함수종속됨
기본키를 구성하는 열의 일부에만 함수종속이 존재함 (제2정규화 위반)
8. 3NF (Third Normal Form, 제3정규화, 제3정규형)
1) 제2정규형을 만족하고 일반속성들 간에도 종속관계가 존재하지 않아야 함
2) 일반속성들 간 종속관계가 존재하는 것들은 분리되어야 함
3) 함수적 종속성(Functional Dependency) 분석 (예)
- 고객명은 고객아이디로 결정됨
-> 부분 함수 종속 아님. 함수종속이 존재함
- 나이는 고객아이디로 결정됨
-> 부분 함수 종속 아님. 함수종속이 존재함
- 직업명은 직업코드로 결정됨
-> 일반 속성(컬럼)인 직업코드에 함수종속이 존재함. (제3정규화 위반)
9. 제4, 5정규형 (4NF, 5NF)
1) 실무에서 거의 쓰이지 않음
2) 제3정규형까지만 이해하는 것이 중요함'개발자 수업 > DB' 카테고리의 다른 글
19. 데이터 모델링 실습 (0) 2021.11.17 17. 논리적 설계 (0) 2021.11.16 16. 데이터베이스 설계 (0) 2021.11.16 15. SELECT (0) 2021.11.16 14. JDBCConnectTest (0) 2021.11.16