'정규화 데이터베이스(Normalized Database)'는 중복을 최소화하도록 설계된 데이터베이스를 말한다. DB의 저장 용량 역시 줄일 수 있다.
정규화는 관계형 데이터베이스의 설계에서 중복을 최소화하기 위해 '데이터를 구조화하는 작업'이다.
정규화은 특정 조건을 만족하는 릴레이션의 스키마 형태를 말하는데, 제 1 정규형, 제 2 정규형, 제 3 정규형, BCNF형, 제 4 정규형, 제 5 정규형이 존재한다.
정보처리기사 : 도부이결다조!!!
1. 데이터베이스 변경 시 이상현상 제거
각종 이상 현상(Anomaly) 을 방지하기 위해서, 테이블의 구성을 논리적이고 직관적으로 한다.

1) 삭제 이상 (Delete Anomaly)
행(row) 삭제시 연쇄 삭제가 발생한다.
홍길동 학생이 ST01 과목을 수강 취소할 경우, 연락처도 함께 지워진다.
2) 삽입 이상 (Insert Anomaly)
행 삽입시 지정하지 않은 속성값이 NULL을 갖거나, 원하지 않는 자료가 삽입된다.
홍길동 학생의 연락처만 추가하고 싶을 때, 과목코드가 비어 NULL값이 생겨 문제가 발생한다.
3) 갱신 이상 (Update Anomaly)
데이터 갱신시 일관성 유지가 안된다.
홍길동 학생이 연락처를 바꿨을 경우, ST01, ST02 과목코드를 모두 갱신해야 하는데 ST01 만 갱신할 경우 문제가 발생한다.
2. 효과적인 검색 알고리즘 생성
불필요한 정보를 제외하며, JOIN을 통해서 원하는 정보를 가져올 수 있다.
3. 데이터 구조의 안정성, 무결성 유지
데이터의 정확성, 일관성, 유효성을 유지할 수 있다.
데이터의 무결성을 유지하는 것은 데이터베이스 관리시스템 (DBMS)의 중요한 기능이며, 주로 데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지하게 된다.
4. 불필요한 데이터 제거, 데이터의 중복을 최소화
만약 하나의 테이블에 모든 정보를 다 넣게 되면 불필요하게 중복되는 데이터가 저장될 수 있다. 그럼 불필요하게 더 많은 디스크 공간을 차지하게 될 수 있다. 따라서 테이블 간에 FK(외래키)로 PK(기본키)를 연결하여 디스크 공간을 훨씬 효율적으로 사용할 수 있다.
5. 데이터베이스 구조 확장 시 재디자인을 최소화
정규화된 데이터베이스 구조에서는 테이블에 새로운 데이터 형의 추가로 인한 확장시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 되는 경우가 있다.
이 때, 해당 데이터베이스와 연동된 응용 프로그램에 최소한의 영향을 주며 효율적으로 사용할 수 있게 된다.
1. Join연산의 증가로 응답 시간이 저하됨
not null, 중복값 x
한 컬럼에 null 값이나 중복갔이 있으면 테이블을 분리해야 한다.
1NF를 만족하는 조건 :
1. 어떤 Relation에 속한 모든 Domain이 원자값(atomic value)만으로 되어 있다.
각 전화번호 컬럼에 데이터를 하나씩 담는다. (컬럼이 원자값만으로 구성됨)

2. 모든 attribute에 반복되는 그룹(repeating group)이 나타나지 않는다.
Telephont Number1, Telephont Number2 처럼 반복되는 전화번호 컬럼을 한 컬럼으로 만들어 2번 조건을 만족시킨다.

3. 기본 키를 사용하여 관련 데이터의 각 집합을 고유하게 식별할 수 있어야 한다.
Customer ID가 더 이상 고유하게 식별할 수 있는 키가 아니기 때문에 테이블을 분리하여 3번 조건을 만족시켜 준다.

부분적 함수 종속 제거를 통해 개체의 속성이 한 식별자에 종속되어야한다.
복합키를 써야하는 경우에는 테이블을 분리해서 하나의 pk만 사용할 수 있도록 해야 한다.
즉 아래와 같은 구조를 같게 된다.

따라서, 부분 함수 종속을 제거하면 아래와 같다.

한 테이블 정보가 바뀌면 연결된 테이블 정보도 함께 바뀌도록 테이블을 분리해야 한다.
이행적 함수 종속을 제거하여
3NF 를 만족하는 조건 :
1. Relation이 제 2정규화 되었다.
2. 기본 키(primary key)가 아닌 속성(Attribute)들은 기본 키에만 의존해야 한다.

위에서 Winner Date of Birth 은 기본키인 {Tournament, Year}가 아닌, Winner 속성을 거쳐 {Tournament, Year}를 의존하고 있다. (==이행적 함수 종속 관계)
따라서, 아래와 같이 테이블을 분리한다.
Date of Birth → Winner가 되고, Winner → {Tournament, Year}가 되면서 완전 함수적 종속 관계가 된다.
BCNF는 3NF를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.
다중치 종속 제거
조인 종속 제거
비정규화 데이터베이스(Denormalized Database)는 읽는 시간을 최적화하도록 설계된 데이터베이스를 말한다.
비정규화는 하나 이상의 테이블에 데이터를 중복해 배치하는 '최적화 기법'이다. 시스템의 성능향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 '의도적으로' 정규화 원칙을 위배하는 행위이다.
참조 사이트 : [Database] DB 정규화 & 비정규화란?