DB_RDBMS - 7. 정규화

몽구's·2022년 5월 13일
0

DB_RDBMS 모델링

목록 보기
8/8
post-thumbnail

정규화란?

정규화는 데이터의 중복 방지, 무결성을 충족하기 위해 데이터베이스를 설계하는 방법으로 1972년 영국의 컴퓨터 과학자인 Edgar F. Codd가 처음으로 제안하였다.

1. 정규화의 목표 및 이유

: 정규화의 기본 목표는 '테이블 간의 중복된 데이터를 허용하지 않는다는 것이다.'
이는 중복된 데이터를 허용하지 않음으로써, 무결성을 유지할 수 있으며 DB의 저장 용량을 줄일 수 있다.

데이터를 중복으로 저장하면, 일관되지 않은 데이터, 비정상적인 삽입, 갱신, 삭제처리, 디스크 공간의 낭비 등 많은 문제를 일으킨다.
정규화는 중복 데이터를 저장하면서 발생시키는 문제점을 없애기 위해, 정보를 주제별로 분할하는 프로세스라 할 수 있다.

2. 정규화의 효과 및 장점

  • 정규화를 통해 각 테이블의 개념들이 좀 더 세분화됨에 따라 해당 개념에 대한 재활용 가능성이 높아진다.
  • 정규화는 식별자가 아닌 속성이 한번만 표현됨에 따라 중복이 최소화된다.
    이에 따라 데이터 품질이 확보되고 저장공간이 절약되며, 데이터 조작언어(DML) 처리시 성능이 향상된다.

3. 정규화의 단점

  • 릴레이션의 분해로 인해 릴레이션 간 연산이 많이져 응답시간이 오히려 느려질 수 있다.
  • 정규화의 단점을 국복하기 위해 "반정규화"를 통해 성능을 향상시키는 방법이 있다.

4. 정규화 단계

제 1 정규화

: 테이블 칼럼이 '원자 값'을 갖도록 테이블을 분해하는 것.
-> 원자 값은 하나의 값을 의미하며 속성 값이 더 이상 분해될 수 없는 값을 의미한다.

제 2 정규화

: 제 1 정규화를 진행한 테이블에 대해 '완전 함수 종속'을 만족하도록 테이블을 분해하는 것.
-> 완전 함수 종속은 기본키의 부분 집합이 결정자가 되어선 안된다는 것을 의미한다.
-> 완전 함수 종속을 충족시키기 위한 조건이 있다. (복합키로 구성된 칼럼을 분해한다던지, 부분 함수 종속을 파악해 분해한다던지)

제 3 정규화

: 제 2 정규화를 진행한 테이블에 대해 '이행적 함수 종속'을 없애도록 테이블을 분리하는 것.
-> 이행적 함수 종속이란? A -> B, B -> C가 성립할 때, A -> C가 성립되는 것을 의미한다.

정규화 단계의 예시 1

다음의 예시를 통해 정규화가 어떻게 진행되는지 알 수 있다.

제 1 정규화

제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.

정규화 필요 예시 1을 보면 두개의 회사가 부서번호를 통해 식별되고 있다. 하지만 이용가능요일을 보게되면 여러 개의 데이터가 들어가 있음을 확인할 수 있다.

이에 테이블의 컬럼이 원자값을 갖는다는 말은, 이용가능한요일이라는 컬럼에 값이 하나씩만 들어가도록 조정해야 한다!

제 2 정규화

제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다.

완전 함수 종속?, 부분 함수 종속? 이행적 함수 종속?
이런 개념들은 제 2 정규화를 진행하기 전 빠르게 알아가자!

함수 종속성

어떤 테이블 A와 B에 대하여, A값에 의해 B 값이 유일하게 정해지는 관계를 말한다.

이때, A를 결정자라고 하고, B를 종속자라고한다.

Ex) 함수종속성의 결정자와 종속자 예시.

함수종속성 종류.

< 완전 함수 종속을 충족한 테이블의 예시 >

프로그램 번호를 기본키로 구성된 헬스케어 프로그램의 구성이다.
다양한 프로그램이 있지만, 프로그램 번호를 알면 프로그램의 코스와 프로그램명, 프로그램 설명의 정보를 명확하게 알 수 있다.
즉, 프로그램번호는 결정자이고, 프로그램 코스, 프로그램 명, 프로그램 설명은 프로그램 번호에 함수적 종속성이 있다고 할 수 있다.

< 다양한 부분 함수 종속을 가진 테이블의 예시 >

예약번호를 기본키로 구성된 예약 테이블이다.
예약번호를 통해 언제, 몇시에, 누가, 어떤 코스를, 몇분동안, 결제는 했는지? 등 다양한 정보를 담고 있다.
이는 예약번호를 통해서도 알 수 있는 정보이면서도 기본키가 아닌 다른 속성에 종속되기 때문에 부분 함수 종속을 띄고 있다고 할 수 있다.
각각의 부분함수 종속을 충족하는 조건은 다음과 같다.
1. 회원번호는 결정자이고, 회원정보들과 함수적 종속성을 가진다.
2. 프로그램 번호는 종속자이고, 프로그램정보들과 함수적 종속성을 가진다.
3. 프로그램 옵션번호는 종속자이고, 프로그램 시간, 가격과 함수적 종속성을 가진다.
4. 결제번호는 종속자이고, 결제수단과 결제상태와 함수적 종속성을 가진다.

위와 같은 테이블의 완전 함수 종속을 만족시키기 위해 제 2 정규화를 진행하면 다음과 같은 결과를 얻을 수 있다.

제 2 정규화의 핵심인 완전 함수 종속을 충족시키기 위해선, 부분 함수 종속을 제거해야 한다!

제 3 정규화

제 3 정규화란 제 2 정규화를 진행한 테이블에 대해 ‘이행적 함수 종속’을 없애도록 테이블을 분해하는 것이다.

이행적 함수 종속이란?
: 테이블 내의 기본키(PK)가 아닌 일반 칼럼으로 종속되는 칼럼들을 분리한다.

앞서 설명한 예약 테이블을 기준으로 제 3 정규화를 진행하면 다음과 같다.

오늘은 여기까지...

수정이 이뤄진다면 좀 더 보완하겠다!

profile
"성공"하면 실력이고, "실패"해도 경험인걸요.

1개의 댓글

comment-user-thumbnail
2023년 6월 20일

질문이 있습니다 velog 는 애드센스 적용이 안되는걸로 알고있는데 아닌가요?

저도 광고를 달아서 블로그 운영을 하고싶습니다

답글 달기