제 3정규형(Third Normal Form, 3NF)은
데이터베이스 테이블이 제 2정규형(2NF)을 만족하며, 추가적으로
모든 비기본 키 속성이 기본 키에만 종속되고
기본 키가 아닌 다른 속성에는 종속적이지 않아야 합니다
이를 '이행적 종속성이 없어야 한다'고 합니다.
이행적 종속이란 A -> B, B -> C의 종속 관계에서 A가 B에 종속되고, B가 C에 종속될 때, 간접적으로 A가 C에 종속되는 관계를 말합니다.
제 3정규형을 만족하지 못하는 예제
학생ID | 학생 | 과목코드 | 과목명 | 교수ID | 교수이름 |
1 | 홍길동 | MAT101 | 수학 | 101 | 김교수 |
2 | 이순신 | ENG101 | 영어 | 103 | 박교수 |
학생 성적 테이블
학생 성적 테이블이 제 3정규형(3NF)을 만족하도록 설계하기 위해 이행적 종속성을 제거해야 합니다. 현재 테이블에서 교수 이름은 교수ID에 의존적이며, 이는 과목코드에도 간접적으로 의존적인 관계입니다. 따라서 이러한 이행적 종속성을 제거하여 각 속성을 기본 키에만 직접적으로 종속되도록 조정해야 합니다.
분해 과정
- 학생 정보 테이블: 학생의 기본 정보를 저장합니다.
- 과목 정보 테이블: 과목에 대한 정보와 해당 과목을 담당하는 교수의 정보를 저장합니다.
- 수강 정보 테이블: 어떤 학생이 어떤 과목을 수강하는지에 대한 정보를 저장합니다.
학생 정보 테이블
학생ID | 학생 이름 |
1 | 홍길동 |
2 | 이순신 |
과목 정보 테이블
과목코드 | 과목명 | 교수ID | 교수 이름 |
MAT101 | 수학 | 101 | 김교수 |
ENG101 | 영어 | 103 | 박교수 |
수강 정보 테이블
학생ID | 과목코드 |
1 | MAT101 |
2 | ENG101 |
이행적 종속성이 제거 → 각 테이블이 제 3정규형을 만족
CREATE TABLE 학생정보 (
학생ID INT PRIMARY KEY,
학생이름 VARCHAR(50)
);
CREATE TABLE 과목정보 (
과목코드 VARCHAR(10) PRIMARY KEY,
과목명 VARCHAR(50),
교수ID INT,
교수이름 VARCHAR(50)
);
CREATE TABLE 수강정보 (
학생ID INT,
과목코드 VARCHAR(10),
PRIMARY KEY (학생ID, 과목코드),
FOREIGN KEY (학생ID) REFERENCES 학생정보(학생ID),
FOREIGN KEY (과목코드) REFERENCES 과목정보(과목코드)
);
정규화의 장점
- 데이터베이스 변경 시 이상 현상(Anomaly) 제거
- 데이터베이스 구조 확장 시 재 디자인 최소화 (데이터 구조의 안정성 및 무결성 유지)
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 이는 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되며 응용프로그램의 생명을 연장시킨다.
- 사용자에게 데이터 모델을 더욱 의미있게 제공
- 정규화된 테이블들과 정규화된 테이블들간의 관계들은 현실 세계에서의 개념들과 그들간의 관계들을 반영한다.
- 저장 공간의 최소화 가능
- 효과적인 검색 알고리즘 생성 가능
- 데이터 삽입 시 릴레이션 재구성의 필요성 감소
정규화의 단점
- 조인의 증가: 정규화를 통해 테이블을 더 작은 테이블로 분해함으로써 데이터의 중복을 줄이고 무결성을 높일 수 있습니다. 그러나 이 과정에서 관계를 맺고 있는 여러 테이블 간에 조인 연산이 필요해지며, 이는 쿼리의 복잡성을 증가시키고 실행 시간을 늘릴 수 있습니다.
2.성능 저하: 데이터가 여러 테이블에 분산되어 있을 경우, 필요한 정보를 얻기 위해 여러 테이블을 조인해야 하므로 쿼리 실행 속도가 느려질 수 있습니다. 특히 대규모 데이터베이스에서는 이러한 성능 저하가 더욱 두드러질 수 있습니다.
3.응답 시간의 지연: 정규화 과정에서 데이터를 여러 테이블로 분할하면, 특정 데이터에 대한 응답을 받기 위해 여러 테이블에서 데이터를 읽어와야 합니다. 이 과정에서 네트워크 지연이나 디스크 I/O 증가로 인해 응답 시간이 길어질 수 있습니다.
위와 같은 단점 또는 조회를 하는 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우에 반정규화를 적용하는 전략이 필요할 수 도 있습니다.
반정규화(De-normalization, 비정규화)
정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나이다.
디스크 I/O 량이 많아서 조회 시 성능이 저하되거나, 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나, 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
일반적으로 조회에 대한 처리 성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 된다.
'MySQL' 카테고리의 다른 글
UNION 연산자 (1) | 2024.10.01 |
---|---|
제 2정규화(Second Normal Form, 2NF) (1) | 2024.10.01 |
제 1정규화(First Normal Form, 1NF) (2) | 2024.10.01 |
서브 쿼리란 (0) | 2024.10.01 |
쇼핑몰과 카테고리 2단계 (3) | 2024.10.01 |