정규화(Normalization)
- 데이터의 중복을 줄이고, 무결성 향상, 이상 현상을 방지한다.
이상 현상(Anomaly)
- 잘못된 정규화로 데이터의 중복이 발생되고, 무결성이 저하되는 현상
- 삽입 이상(Insertion Anomaly)
- 기본키가 {Studnet ID, Course ID} 일 때, Course를 수강하지 않은 학생은 Course ID가 없음.
- 기본키는 Null이 될 수 없어서 테이블에 추가 불가능
- 갱신 이상(Update Anomaly)
- 어떤 학생의 전공이 A에서 B로 바뀌는 경우, 모든 A를 B로 바꿔야 한다. 하지만 일부가 바뀌지 않는 형상
- 삭제 이상(Deletion Anomaly)
- 어떤 학생이 수강을 삭제할 때, {Student ID, Department, Course ID, Grade} 정보 중에 Student ID, Department와 같은 학생에 대한 정보도 삭제 된다.
제1 정규화(1NF)
- 테이블 칼럼이 원자값(하나의 값)을 갖도록 테이블을 분리시키는 것
- 릴레이션에 속한 모든 도메인이 원자값으로만 되어 있어야한다.
- 모든 속성에 반복되는 그룹이 나타나지 않는다.
- 기본키를 사용하여 관련 데이터의 각 집합을 고유하게 식별 가능해야 한다.
제2 정규화(2NF)
- 제 1정규화를 만족하고, 테이블의 모든 칼럼이 완전 함수적 종속을 만족해야 한다.
- 기본키가 복합키(키1, 키2) 일 때, 두개의 키 중 하나의 키만 남긴다.
제3 정규화(3NF)
- 제 2정규화를 만족하고, 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리한다.
- A -> B, B -> C 이면 = A -> C
정규화의 장점과 단점
- 장점
- 데이터베이스를 변경 할 때, 이상 현상을 방지할 수 있다.
- 데이터베이스를 확장할 때, 정규화 데이터베이스는 일부만 변경해도 된다.
- 단점
- 릴레이션의 분해로 인해, 릴레이션 간의 연산(JOIN)이 증가하게 된다. -> 응답 시간 저하
- 과도한 정규화와 데이터 입력/수정/삭제 연산이 잦으면, 데이터 처리 속도가 느려저 응답 시간 저하 or 데이터 무결성 X
반정규화
- SQL에서 잦은 조인으로 성능 저하가 나타나는 경우에 반정규화 사용
- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고, 항상 일정한 범위만 조회하는 경우 사용
- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우
- 테이블에 지나친 조인으로 데이터 조회가 어려울 경우
'CS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] SQL vs NoSQL (1) | 2022.09.30 |
---|---|
[데이터베이스] 트랜잭션(Transaction) - lock, ACID, 교착상태 (1) | 2022.09.30 |
[데이터베이스] 인덱스 Index, B tree (0) | 2022.09.30 |
[데이터베이스] 데이터베이스 특징 - 무결성, 독립성, 보안성, 중복 최소화, 일관성 (0) | 2022.09.30 |
[데이터베이스] MySQL Data Type, MySQL 내장 함수 (0) | 2022.07.20 |