데이터베이스 정규화 (DB 정규화)
데이터베이스 정규화 예제로 간략하게 정규화에 대한 설명을 하겠습니다.
제1 정규화 : 반복되는 필드가 없어야 합니다.
이름 암호 별명1 별명2 별명3
---------------------------------------------
A 12 바보 쪼다 천치
B 13 천재 오버 NULL
C 14 상식 NULL NULL
D 15 오리 NULL NULL
위와 같이 이렇게 설계 하지 않고 다음처럼 합니다.
이름 암호
--------------
A 12
B 13
C 14
D 15
id 이름 별명
---------------
1 A 바보
2 A 쪼다
3 A 천치
4 B 천재
5 B 오버
6 C 상식
7 D 오리
이렇게 설계해야 합니다.
제2 정규화 : 중복되는 데이터를 분리해야 합니다.
사번 이름 부서 부서장
---------------------------------------
10101 홍길동 총무과 이부장
10102 고길동 총무과 이부장
10103 박길동 인사과 박부장
10104 최길동 인사과 박부장
위와 같은 구조를 다음과 같이 설계합니다.
사번 이름 부서번호
-------------------------
10101 홍길동 1
10102 고길동 1
10103 박길동 2
10104 최길동 2
부서번호 부서 부서장
--------------------------------
1 총무과 이부장
2 인사과 박부장
제3 정규화 : 주 키에 의존적이지 않은 데이터를 분리합니다.
학번 이름 국어점수 국어타입 수학점수 수학타입
-------------------------------------------------------------------------
10101 홍길동 100 전공필수 80 교양선택
위와 같은 구조를 다음과 같이 합니다.
학번 이름
------------------
10101 홍길동
10102 고길동
과목 타입
------------------
국어 전공필수
영어 교양선택
형태로 바꾸어 줍니다.
정규화의 원칙 : More Table Less Column을 지향합니다.
- FK 이외에는 중복 컬럼을 허용하지 않아야 함.
=> 이 원칙을 지킬 경우 JOIN의 횟수가 늘어날 가능성이 높으므로
JOIN횟수를 줄이기 위해서
아주 많이 일어나는 Query의 속도를 빠르게 하기 위해
약간의 중복을 허용합니다.
** 정규형 정규화 과정 **
1NF
대부분의 릴레이션이 1NF에 속함. 모든 도메인이 원자 값으로만 되어 있는 것.
2NF
1NF에서 부분적 함수 종속 제거
3NF
2NF에서 이행적 함수 종속 제거
BCNF
3NF에서 결정 & 후보키 제거
4NF, 5NF는 거의 쓸일이 없을 것으로 사료되옵니다.
정규화는 정규화 할 수록 테이블 조회 시 조인을 해야 하기때문에 성능이 떨어지는 부분이 있지만 보통 3정규화까는 합니다.
'IT만들기 > Database' 카테고리의 다른 글
오라클 스케줄러(SCHEDULER), 잡(JOB)으로 일정 시간마다 또는 매일 자동 실행 등록하는 방법입니다. (0) | 2021.07.08 |
---|---|
오라클 sqlplus 에서 실행한 쿼리 조회 결과 스풀(spool) 기능으로 캡처하여 텍스트 저장하기 (0) | 2021.07.08 |
오라클(oracle) 락(lock - 세션, 로우) 확인 및 락 걸린 세션 제거(kill) (1) | 2021.01.08 |
오라클 공인교재용 샘플 DB 생성 스크립트 및 DB 삭제 (0) | 2020.03.07 |
오라클 함수, 프로시저 또는 트리거에서 내용 찾기를 해봅시다. (0) | 2018.10.12 |
오라클 암복호화 패키지 설치 방법 (0) | 2011.12.05 |
오라클 공인교재용 SQL 샘플 DB 삭제 스크립트 (0) | 2009.01.07 |
오라클 에러 메세지 (0) | 2009.01.07 |
댓글