2025-08-13 07:13
Tags: SQL
정규화
정규화가 만들어진 이유
- 데이터 종속성: 데이터 구조 변경 → 사용하는 모든 응용 프로그램 수정
- 데이터 중복성: 여러 프로그램이 동일 데이터 각자 중복 저장 → 저장 공간 낭비. 일관성 유지 X
- ⇒ 데이터 베이스를 응용 프로그램에서 독립 → 데이터를 관계 라는 표 형태로 관리하는 관계형 모델
- 여기서 나온게 바로 정규화 ⇒ 데이터 이상 현상 해결
- 함수종속성(완전, 부분, 이행)(결정자→종속자) 있는 데이터 모델→ 정규화 → 정규형 맞는 데이터 모델
- 입력 삭제 수정 성능 향상 BUT 조회는 저하될 수 있음 →반정규화
정규화 종류: 순서대로 적용해야
제 1정규화(1NF) : 원자성. 완전함수종속성 제거
- 모든 속성은 반드시 하나의 값을 가져야 한다. 중복 인스턴스X
- 테이블의 모든 속성 값은 원자적(Atomic)이어야 한다.**
제 2정규형(2NF) : 부분함수종속성 제거
- 엔터티의 일반 속성은 주식별자 전체에 종속이어야 한다.
- 1NF를 만족하고, 기본 키(Primary Key)가 아닌 모든 속성은 기본 키에 완전 함수 종속되어야 한다.
제 3정규형(3NF) : 이행함수종속성 제거
- 엔터티의 일반 속성 간에는 서로 종속적이지 않다.
정규화 절차
제 1정규화: 원자성 확보
- 각 행이 하나의 수강 정보를 나타내도록 분리
- 각 속성은 하나의 값만
- 수강과목 → 과목코드, 과목명, 담당교수 모두 다른 속성으로
학번 | 이름 | 학과 | 수강과목 (과목코드, 과목명, 담당교수) |
---|
1001 | 김철수 | 컴퓨터공학 | CS101, 데이터베이스, 이영희 CS202, 운영체제, 박진수 |
1002 | 박영미 | 전자공학 | EE201, 회로이론, 최민준 |
학번 | 이름 | 학과 | 과목코드 | 과목명 | 담당교수 |
---|
1001 | 김철수 | 컴퓨터공학 | CS101 | 데이터베이스 | 이영희 |
1001 | 김철수 | 컴퓨터공학 | CS202 | 운영체제 | 박진수 |
1002 | 박영미 | 전자공학 | EE201 | 회로이론 | 최민준 |
제 2정규화: 부분함수종속 제거
- (학번, 과목코드) → 담당교수: 특정 학생이 특정 과목 수강 → 담당 교수 결정 (완전함수종속)
- 학번 → 이름, 학과 : 하나의 기본키 학번 만으로 이름, 학과 결정 (부분함수종속)
- 과목코드 → 과목명: 하나의 기본키 과목코드 만으로 과목명 결정(부분함수종속)
- 학생테이블
학번 (PK) | 이름 | 학과 |
---|
1001 | 김철수 | 컴퓨터공학 |
1002 | 박영미 | 전자공학 |
- 과목 테이블
과목코드 (PK) | 과목명 | 담당교수 |
---|
CS101 | 데이터베이스 | 이영희 |
CS202 | 운영체제 | 박진수 |
EE201 | 회로이론 | 최민준 |
- 수강신청테이블
학번 (FK) | 과목코드 (FK) |
---|
1001 | CS101 |
1001 | CS202 |
1002 | EE201 |
제 3정규화: 이행함수종속 제거
- 이행적 함수 종속 관계 제거: A → B, B→C 일때, A → C 성립할때, 기본키 아닌 속성이 다른 속성 결정
- 과목코드 → 담당 교수, 담당 교수 → 교수학과 이면, 과목코드 → 교수학과 성립하는 이행적 함수 종속
- 이 경우 만약 교수의 소속학과 바뀜 → 담당하는 모든 과목의 교수학과 바꿔야함
- 이행적 함수 종속 → (제 3정규화) → 별도의 테이블로 분리
1. 과목 테이블 (수정)
과목코드 (PK) | 과목명 | 담당교수 |
---|
CS101 | 데이터베이스 | 이영희 |
CS202 | 운영체제 | 박진수 |
EE201 | 회로이론 | 최민준 |
2. 교수 테이블 (신규)
담당교수 (PK) | 교수학과 |
---|
이영희 | 컴퓨터공학 |
박진수 | 컴퓨터공학 |
최민준 | 전자공학 |
- 결정자이면서 후보키가 아닌 경우 제거.
- 흔치 않은 케이스로 제 3정규화 강화버전으로 이해하고 넘어가자
언급한 노트 (Outgoing Links)
백링크 (Backlinks)