정규화(테이블 분리)
- 테이블에 중복된 데이터가 발생하는 것을 줄일 수 있습니다.(1정규화)
- 테이블에 null 컬럼이 발생하는 것을 줄일 수 있습니다.(1정규화)
- 특정 테이블에 컬럼이 집중되는 것을 효과적으로 분리 할 수 있습니다.(3정규화)
- 하나의 테이블에 두부류의 데이터 형질을 나타내는 목적을 가지고 있는 컬럼들
테이블 분리의 대상이 됩니다.(2정규화)
테이블 분리의 대상이 됩니다.(2정규화)
- 정규화를 많이하면 테이블이 너무 작게 쪼개져 과다한 JOIN으로 인한 과부하가 발
생하게 됩니다. (역정규화)
생하게 됩니다. (역정규화)
- 처리 속도 향상을 위해 역정규화를 실시합니다.(테이블 결합)
1. 제1 정규화
- 반복되는 레코드들이 있는 테이블을 두개의 테이블로 나눈후 P.K를 적용시켜 중복
되는 레코드가 발생되지 않도록 하는 것이 목적, 1:N의 관계 생성 합니다.
되는 레코드가 발생되지 않도록 하는 것이 목적, 1:N의 관계 생성 합니다.
1. 모든 테이블은 PK(Primary Key)속성이 있어야 합니다.
기본 적인 테이블 구조
성명이 중복해서 있습니다.
↓
성명 주소
-------------------
개발자1 인천
디자이너 인천
개발자1 서울
- 기초속성을 가지고 Primary Key를 적용 한 경우
PK
↓
사번 성명 주소
------------------------------
A001-0001 개발자1 인천
A001-0002 디자이너 인천
A001-0003 개발자1 서울
- 설계속성을 가지고 Primary Key를 적용한 경우, PK컬럼을 위해 sequence(일련번
호) 컬럼을 추가합니다.
호) 컬럼을 추가합니다.
PK Unique
↓ ↓
num 사번 성명 주소
-------------------------------------
1 A001-0001 개발자1 인천
2 B001-0002 디자이너 인천
3 A001-0003 개발자1 서울
2. 중복된 레코드가 들어가 있는 [사원테이블 ]
num 사원번호 성명 주소 자격증 취득일
------------------------------------------------------------------------
1 A001-0001 개발자1 인천 정보처리 2013-05-12
2 A001-0001 개발자1 인천 운전면허 2014-03-12
3 A001-0001 개발자1 인천 정보검색 2014-11-12
4 B001-0001 개발자2 서울 scjp 2015-11-12
5 B001-0001 개발자2 서울 scwcd 2014-11-12
- 1정규화가 이루어진 1:N관계의 2개의 테이블
<회원 테이블>
PK
사원번호 성명 주소
--------------------------------
A001-0001 개발자1 인천
B001-0001 개발자2 안산
A001-0002 개발자3 서울
<자격증 테이블>
PK FK
num 사번 자격증 취득일
-------------------------------------------------
1 A001-0001 정보처리 2013-05-12
2 A001-0001 운전면허 2014-03-12
3 A001-0001 정보검색 2014-11-12
4 B001-0001 scjp 2015-11-12
5 B001-0001 scwcd 2014-11-12
- 다른예) 과정테이블(과정코드, 과졍명, 교육내용, 교육기간, 강의 시간, 수강료,
교재1, 교재2, 교재3, 교재4, 교재5) -->
과정테이블과 교재테이블로 분리
과정코드 과정명 교육내용 교육기간 강의시간 수강료 교재1 교재2 교재3 교재4 교재5
J001 java과정 .. .. .. .. scjp wcd bcd null null
O001 OCP과정 .. .. .. .. ocp1 ocp2 ocp3 ocp4 null
C001 C과정 .. .. .. .. C C++
과정테이블(부모 )
PK
과정코드 과정명 교육내용 교육기간 강의시간 수강료
----------------------------------------------------------------------
J001 자바과정
O001 OCP과정
C001 C과정
교재테이블(자식 )
PK FK
교재번호 과정코드 교재명
=========================
1 J001 scjp
2 J001 wcd
3 J001 bcd
4 O001 ocp1
5 C001 C
6 C001 C++
2. 제2정규화
- 복합키로 구성되어 있는 테이블의 모든 컬럼들은 복합키 전체에
의존해야 하며, 그렇지 않을 경우 제 2 정규화의 대상이 됩니다.
복합키의 일부분에 의해 종속되는 것을 부분적 함수 종속관계라고
하며 이를 제거합니다.
※ 키의 의존적이란 말은 사원테이블의 예로 사원번호라는 키만
알면 그 사원의 이름, 주소,성별, 입사일을 알 수 있음을
의미합니다.
<학과등록 테이블>의 예
3. 제3정규화
- 기본키에 의존하지 않는 일반 컬럼이 있는 경우 테이블을 분리합니다.
- 테이블의 기본키가 아닌 모든 컬럼들은 기본키에 의존해야 하는데
다른 일반 컬럼에 의존적인 컬럼이 있습니다. 이를 이전적 함수
종속 관계라 하며 이를 해결해야 합니다.
<주문 테이블>의 예
4 정규화 실습
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 한글 몇바이트로 인식되고 있는지 확인하는 방법 (0) | 2019.12.11 |
---|---|
[Oracle] 프로시져 생성(간단설명) (0) | 2019.07.09 |
[Database] 논리적 모델링 (0) | 2017.02.27 |
[Database] 개념적 DB모델링 (0) | 2017.02.27 |
[Database] 업무 및 요구사항 분석 (0) | 2017.02.27 |