본문 바로가기
데이터베이스

03. 정규화

by saniii 2022. 12. 29.

정규화

정규화

: 테이블을 재구성하여 논리적 구조를 개선하는 절차

불필요하게 중복되는 데이터를 제거하여 저장 공간을 절약하고 전체적인 성능을 향상시킨다. 규칙에 따라 테이블이나 필드를 세분화하면 관리 편의성도 좋아진다.

→ 하나의 데이터가 한 곳에 저장되도록 한다.

제 1 정규화

: 필드의 데이터를 원자화(atomicity)한다.

필드에는 단일값을 저장하고 필드끼리는 독립적이어야한다.

만일 필드에 단일값을 저장하지 않고 한 필드에 “수학, 국어, 영어” 와 같이 저장한다면 과목의 수에 제한이 없어 필드의 길이를 미래를 생각해서 미리 충분히 확보해야하므로 저장 공간을 낭비하게 되며, 단일 값이 아니므로 = 연산자로 값을 비교할 수도 없고 문자열 검색 알고리즘은 그 한계상 신뢰하기도 어렵다. 뿐만 아니라 수정할 시에 문자열에 대한 처리를 통해 수정해야하며 물론 콤마 처리도 고려해야한다.

따라서 우리는 필드값이 더 이상 나눌 수 없는 단일값이어야 관리하기 편리함을 알 수 있다. 그렇다고 한 테이블에 필드값에 원자성을 주기 같은 종류의 필드를 여러 개 생성하게 되면(과목1, 과목2, 과목3, …) 원자성은 확보되지만 레코드당 가질 수 있는 해당 필드의 개수에 제한이 생기거나 불필요한 자원 낭비가 심해지게 된다. 필드보다는 레코드가 늘리고 줄이기 자유롭기 때문에 테이블을 분할하여 관리하는 것이 더 효율적이다.

두 테이블의 연관 관계, 두 테이블의 관계를 통해 정보를 검색하기 위해 외부 테이블에 대한 참조를 가지는 키, 외래키(FK)를 양 테이블에 두어 정보를 구할 수 있다. 여기서 업무의 주체가 되는 케이블을 부모, 마스터라 하고 반대쪽을 자식, 디테일이라고 한다.

⇒ 반복되는 데이터를 가로(열 방향)가 아닌 세로(행 방향)로 늘리는 것

⇒ 테이블 분할과 기본키 지정이 이루어진다.

중복되지 않은 값 중에서 기본키를 설정할 수 있다.

제 2 정규화

: 일반 필드를 모두 기본키에 종속시킨다. (종속 : 기본키를 알면 나머지 정보도 알 수 있다.)

제 2 정규화에 의해 기본키로부터 엔터티의 인스턴스를 찾고 나머지 필드는 이 엔터티의 추가 속성을 표현한다. (필드별로 할일을 분리하는 건가?) 기본키 전체에 종속되지 않는 필드는 별도의 테이블로 분리하여 제 2정규화를 한다.

: 모든 필드는 복합키 전체에 종속되어야 하며 일부에만 종속되어서는 안된다.

⇒ 키 값을 이용해 데이터를 특정지을 수 있는 것을 찾아내어 테이블을 분할하는 것

⇒ 기본키에 중복이 있는지 확인

제 3 정규화

: 일반 필드끼리는 독립적이어야 한다. → 기본키가 아닌 일반 필드끼리 서로 종속되지 않도록 한다.

이렇게 테이블을 구성할 시 같은 동호회에 가입한 직원끼리는 방번호, 회원수 등의 중복 정보를 가진다

문제점

→ 기억 장소가 낭비된다.

→ 이 테이블의 엔터티는 직원인데 동호회 엔터티가 끼어들어 있다 이럴 경우 가입회원이 없는 신규 통호회는 표현할 방법이 없다.

→ 중복 정보를 변경하기 어렵다. : 동호회에 변경된 정보가 있으면 이 동호회에 속한 모든 회원의 레코드를 다 수정해야한다.

→ 정보의 불일치가 발생할 수 있다. : 동일한 정보가 여러 군데 있으면 항상 불일치가 발생할 여지가 있다.

동호회는 직원의 속성이 아니라 별도의 엔터티이므로 따로 테이블을 구성하는 것이 바람직하다.

다음과 같이 분리하면 직원 테이블의 월급과 동호회는 기본키인 직원명이 종속적이고 동호회 테이블의 방번호와 회원수는 기본키인 동호회에 종속적이므로 제 3 정규화가 완료되었음을 알 수 있다. 직원 테이블의 동호회 필드는 동호회 테이블을 참조하는 외래키, FK이다.

이제 동호회 정보가 하나만 존재하므로 기억 장소의 낭비도, 데이터의 불일치가 발생할 여지도 없다. 또한 가입회원이 없는 신규 동호회도 표현할 수 있다.

같은 사람이 여러 번 주문하는 경우 데이터가 중복될 수 있다.

⇒ 기본키 이외의 부분에서 중복이 없는지 조사

BCNF

: 강화된 제 3 정규형

[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF)

참조 무결성

참조 관계

외래키 제약

연계 참조 무결성 제약

 

댓글