[CS/Database] 정규화
• 정규화란?
하나의 릴레이션(테이블)에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이며, 데이터의 일관성 / 최소한의 데이터 중복 / 최대한의 데이터 유연성을 위한 방법입니다.
⸰ 제1 정규형 : 테이블의 컬럼(열)이 원자 값(하나의 값)을 갖도록 분해합니다.
⸰ 제2 정규형 : 제1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해합니다.
(여기서 완전 함수 종속이란 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미)
위 테이블에서 (학생번호, 강좌이름)을 기본키로 설정하면, 성적은 이 기본키를 통해 결정됩니다.
즉, (학생번호, 강좌이름) → 성적 이라는 관계가 성립합니다.
하지만 강의실 정보(강의실 컬럼)는 강좌이름에 따라 자동으로 결정되므로,
강좌이름 → 강의실이라는 새로운 의존성이 존재합니다.
즉, 강좌이름이 같으면 강의실도 동일해야 하는데, 같은 데이터가 반복 저장되는 중복 문제가 발생합니다.
제2 정규형은 기본키의 일부가 아닌 속성(부분 함수 종속)을 제거하여 테이블을 분리하는 것입니다.
이를 적용하면 강의실 정보를 별도의 테이블로 분리하여 중복을 줄일 수 있습니다.
⸰ 제3 정규형 : 제2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해합니다.
(여기서 이행적 함수 종속이란 A→B, B→C가 성립할 때, A→C가 성립되는 것을 의미)
⸰ BCNF 정규형 : 제3 정규형을 만족하고, 함수 종속성 X→Y가 성립할 때, 모든 결정자 X가 후보키가 되도록 분해합니다.
이 테이블에서 기본키는 (학생번호, 특강이름)입니다.
즉, 학생번호와 특강이름이 함께 있어야 성적이나 교수 정보를 찾을 수 있는 구조입니다.
하지만 교수는 강의에 따라 결정되므로, 특강이름 → 교수라는 새로운 의존성이 발생합니다.
BCNF 정규형은 모든 결정자가 후보키가 되도록 테이블을 분리하는 것입니다.
즉, 교수는 특강이름에 따라 결정되지만, (학생번호, 특강이름) 의 기본키에 속하지 않으므로 테이블을 분리해야 합니다.
• 정규화의 장단점
- 장점
- 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있습니다.
- 데이터베이스 구조 확장시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다.
📓이상 현상의 종류
이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 오류를 말한다.
· 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
· 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
· 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
- 단점
- 릴레이션(테이블) 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아집니다. 이로인해 질의에 대한 응답 시간이 느려질 수 있습니다.
+ 정규화를 수행한다는 것은 이상 현상을 제거한다는 것입니다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있습니다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있습니다.
• 역정규화(반정규화)를 하는 이유
- 정규화를 거치면 릴레이션 간의 연산(JOIN 연산)이 많아지는데, 이로인해 성능이 저하될 우려가 있습니다.
- 역정규화를 하는 가장 큰 이유는 성능 문제가 있는(읽기 작업이 많이 필요한) DB의 전반적인 성능을 향상시키기 위함입니다.
* 위 글은 아래 문서를 참고해 작성했습니다.
https://dev-coco.tistory.com/158
신입 개발자 기술면접 질문 정리 - 데이터베이스
💡 데이터베이스의 특징에 대해 설명해주세요. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 하며, 지속적인 변화(Continuous Evloution) :
dev-coco.tistory.com
https://mangkyu.tistory.com/110
[Database] 정규화(Normalization) 쉽게 이해하기
지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz
mangkyu.tistory.com
review | 1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
check | ✅(2/22) |