데이터의 중복을 제거하고 데이터를 최소 단위로 분해하는 과정으로, 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 확보하기 위한 과정이다. 데이터 이상현상을 줄이기 위한 데이터베이스 설계 기법이며, 엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려된다.
정규화를 하지 않아 발생하는 현상으로, 세 가지 유형이 있다:
| 정규화 단계 | 핵심 내용 | 제거 대상 | 예시 |
|---|---|---|---|
| 제1정규화(1NF) | 테이블의 컬럼이 원자성을 갖도록 분해 | 한 컬럼에 여러 값 존재 | 하나의 연락처 컬럼에 여러 번호가 있는 경우를 분리 |
| 제2정규화(2NF) | 부분 함수 종속 제거 | 기본키의 일부에만 종속되는 속성 | 학생번호+과목코드→성적, 과목코드→교수명에서 교수명을 별도 테이블로 분리 |
| 제3정규화(3NF) | 이행적 종속 제거 | A→B, B→C일 때 A→C 관계 | 학번→학과코드, 학과코드→학과명에서 학과명을 별도 테이블로 분리 |
| BCNF | 모든 결정자가 후보키가 되도록 분해 | 후보키가 아닌 결정자 | 교수가 한 과목만 강의할 때, 과목→교수 관계를 별도 테이블로 분리 |
| 제4정규화 | 다중값 종속성 제거 | 여러 컬럼이 하나의 컬럼을 종속시키는 경우 | 학생이 여러 과목과 여러 취미를 가질 때 발생하는 중복 |
| 제5정규화 | 조인 종속성 제거 | 조인에 의해 종속성이 발생하는 경우 | 복잡한 다대다 관계의 분해 |
데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다. 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 기법이다. 조회(SELECT) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
엔터티의 인스턴스 사이의 논리적인 연관성을 의미한다. 엔터티의 정의, 속성 정의 및 관계 정의에 따라 다양하게 변할 수 있다. 관계는 존재에 의한 관계와 행위에 의한 관계로 분류할 수 있다.
결국 데이터의 중복을 피하기 위해 테이블은 정규화에 의해 분리된다. 분리되면서 두 테이블은 서로 관계를 맺게 되고, 다시 이 두 테이블의 데이터를 동시에 출력하거나 관계가 있는 테이블을 참조하기 위해 데이터를 연결하는데 이 과정을 조인이라고 한다.
하나의 연속적인 업무 단위를 말한다. 트랜잭션에 의한 관계는 필수적인 관계 형태를 가지며, 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있다. 계좌이체를 예로 들면, A 고객이 B 고객에게 이체할 때 A 고객 잔액 차감과 B 고객 잔액 증가가 모두 성공하거나 모두 실패해야 한다(All or Nothing).
| 관계 유형 | 의미 | IE 표기법 | 바커 표기법 | 예시 |
|---|---|---|---|---|
| 필수적 관계 (Mandatory) | • 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성 • 반드시 관계를 가져야 함 • 항상 연관된 엔터티가 존재해야 함 | 관계선 끝에 원이 없음 | 실선으로 표기 | 부서-부서장(부서에는 반드시 부서장이 있어야 함) |
| 선택적 관계 (Optional) | • 두 엔터티가 서로 독립적 수행이 가능 • 관계가 없을 수도 있음 • 연관된 엔터티가 없어도 됨 | 관계선 끝에 원을 그림 | 점선으로 표기 | 고객-주문(고객이 주문을 하지 않을 수도 있음) |
DBMS에서 아직 정해지지 않은 값을 의미한다. 0과 빈문자열('')과는 다른 개념이며, 모델 설계 시 각 컬럼별로 NULL을 허용할지를 결정한다(Nullable Column).
NVL(컬럼, 대체값)ISNULL(컬럼, 대체값)NVL2(컬럼, NULL아닐때값, NULL일때값)COALESCE(값1, 값2, 값3, ...)NULLIF(값1, 값2)DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, ..., 기본값)DECODE(컬럼, NULL, '널값', '널아님') : 실제로 NULL 비교 가능CONCAT(문자열1, 문자열2)LENGTH(문자열) / LEN(문자열)TO_DATE(문자열, 포맷) / CONVERT(DATE, 문자열, 포맷)CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 기본값
END