데이터베이스를 모델링하는 과정에서 성능 향상을 목적으로 다양한 과정을 거치게 되는데 정규화, 반정규화 등의 거쳐 성능과 관련된 사항들이 데이터 모델링에 반영될 수 있도록 해야 합니다.
정규화(Nomalization)란?
정규화는 관계형 데이터베이스에서 테이터 중복을 최소화하기 위해 데이터를 구조화하는 과정으로 각 단계별로 이상현상을 제거하여 무결성(Integrity)을 유지하고 저장 공간까지 효율적으로 사용할 수 있습니다.
① DB 변경 시 이상현상(삽입 이상, 갱신 이상, 삭제 이상)을 제거
② DB 구조 확장 시에 재설계를 최소화하고, 응용프로그램에 영향을 최소화
③ 각 릴레이션에 중복된 속성을 제거하여 여러 개의 릴레이션으로 분할
④ DB에 어떠한 릴레이션도 표현 가능
⑤ 효과적인 검색 알고리즘 생성
제1 정규화(1NF)
테이블의 컬럼이 원자값(속성)을 갖도록 테이블을 분해하는 과정입니다.
위의 테이블을 보시면 전재준과 문동은은 2개 이상의 과목을 수강하고 있기 때문에 제1 정규형을 만족하지 않습니다. 따라서 각 컬럼이 원자값을 가질 수 있도록 데이터를 분해하여 아래와 같이 테이블을 만들어야 합니다.
제2 정규화(2NF)
제1 정규형을 만족하고 테이블을 완전 함수 종속으로 만드는 것입니다. 완전 함수 종속이란 기본키의 부분집합이 결정자가 되면 안된다는 것입니다.
위 테이블에서 [학번 + 수강과목] 기본키로 성적을 알 수 있습니다. 하지만 기본키 내의 [수강과목]이라는 부분집합으로 지도교수를 결정할 수 있기 때문에 완전 함수 종속을 만족시키지 않습니다. 따라서 위의 테이블에서 지도교수 테이블을 분리하여 2개의 테이블로 만들어야 합니다.
제3 정규화(3NF)
제2 정규형을 만족하고 이행 함수 종속을 제거하는 것입니다. 이행 함수 종속이란 A → B, B → C 일 때, A → C가 성립되는 것입니다.
위 테이블에서 학번으로 수강과목을 알 수 있고 수강과목으로 수강료를 알 수 있습니다. 이를 통해 학번으로 수강료를 알 수 있습니다. 따라서 테이블 내에 이행 함수 종속이 존재하므로 수강과목 테이블을 분리하여 이행 함수 종속을 제거해야 합니다.
BCNF 정규화
제3 정규형을 만족하고 모든 결정자가 후보키가 되도록 설계하는 것입니다.
위 테이블에서 [학번 + 수강과목] 기본키로 지도교수를 알 수 있습니다. 하지만 하나의 수강과목을 여러 명의 지도교수가 가르칠 수 있기 때문에 수강과목 → 지도교수 종속은 성립하지 않습니다. 반면, 지도교수 → 수강과목은 성립하지만 지도교수가 후보키가 아니라는 문제가 있습니다. 따라서 위의 테이블에서 지도교수 테이블을 분리하여 이행 함수 종속을 제거해야 합니다.
'IT > DB' 카테고리의 다른 글
DB - 스키마(Schema)의 뜻과 특징, 외부 스키마, 개념 스키마, 내부 스키마 (0) | 2023.02.22 |
---|---|
DB - 인덱스(Index)의 개념과 장단점 (0) | 2023.02.19 |
DB - DROP, TRUNCATE, DELETE 차이점 비교 (0) | 2023.02.18 |
DB - 데이터베이스 언어 DDL, DML, DCL 정의 (0) | 2023.02.17 |
댓글