본문 바로가기

프로그래밍&IT/용어

[Database] 데이터베이스 정규화. (1,2,3 정규화)

간만에(?) SQL Server를 다시 공부하게 되면서, 기존에 애매하게 공부했던 내용부터 다시 공부하기로 했다.

 

정규화 (Normalization)


데이터베이스에서 정규화(Normalization) 란,

"각 각의 엔티티가 하나의 릴레이션에 의해 표현된다"라는 것을 보장하는 과정.

기본 목표는 "테이블 간에 중복된 데이터의 존재를 허용하지 않는다"는것.

 

제대로 정규화된 데이터베이스인 경우,

  • 데이터를 변경하더라도 논리적인문제가 발생하지 않으며
  • 완벽성을 손상시키지 않고서도
  • 데이터 중복을 최소한으로 유지할 수 있다.
  • 무결성 (Integrity)을 유지.
  • DB의 저쟝용량 역시 줄일 수 있다.

 

이를 위해 테이블을 분해하는 정규화 단계에 대해서, Codd박사가 제시한 1,2,3 정규화에 대해 알아보면

 

1정규화

  • 릴레이션 (테이블)의 튜플(행)은 반드시 고유해야 한다
  • 모든 특성들은 더이 상 분해할 수 없는 원자적 (Atomic value) 이어야 한다

ex) "학생" 테이블의 "취미"컬럼이 있을 때, A라는 학생은 취미가 1개일수있지만, B라는 학생은 취미가 2개라면 이를 "취미"테이블로 분해한다는 의미.

데이터베이스, 1정규화

테이블에 있는 각 행들에 대해 고유한 기본키를 정의하면 각 행들을 고유하게 만들 수 있다.

만약 어떤 특성이 애플리케이션에서 필요로 하는 만큼 충분하게 쪼개져 있지않다면, 그 특성역시 더 쪼개질수있는 가능성이 있다는 것을 의미한다.

 

2정규화

  • 데이터는 1정규화를 충족시켜야 한다
  • 키가 아닌 특성과 후보키 특성간의 관계에 대한 것
  • 테이블의 모든 컬럼이 완전 함수적 종속을 만족. (부분적 함수 종속을 제거)

※ 후보키 (Candidate key)

유일성과 최소성을 만족하는 속성 또는 속성들의 집합.

튜플을 유일하게 구볗하기 위해 꼭 피료한 최소한의 속성들로만 이뤄지므로

수퍼키 중에서 최소성을 만족하는 것이 후보키가 된다.

 

- 본격적인 정규화의 시작.

ex) 단순히 2개의 컬럼만이 아니고, "나이"라는 컬럼이 들어간다할 때, "나이"는 "학생"에만 종속된거지 "취미"에 종속된것은 아니므로 이를 해결하기 위해 테이블을 쪼갠다.

데이터베이스, 2정규화

 

3정규화

  • 데이터는 2정규화를 충족해야 한다
  • 이행적 종속을 없애도록 테이블을 분해 

※ 이행적 종속?

A > B , B > C 가 성립할 때, A > C가 성립되는 것을 의미한다.

데이터베이스, 3정규화 하기 전

A > 컴퓨터과 , 컴퓨터과 > 공대, A는 공대 라는 관계가 성립한다.

발생할 수 있는 이상 (Abnormaly)의 예.

  • 삽입 이상 : 컴퓨터과, 전자과 학생을 추가할 경우, 더이상 불필요한 중복정보인 대학 정보가 삽입됨
  • 갱신 이상 : 컴퓨터과의 소속 대학이 "IT대학"으로 변경되었다면, 모두 찾아서 변경해야 한다.
  • 삭제 이상 : A 학생이 자퇴해서 삭제한다 한다면, 이 삭제로 인해 컴퓨터과의 대학정보가 사라져 버린다.

3정규화 진행

 

2,3, 정규화는 "키가 아닌 모든 특성들은 키, 정확히 키 전체에 대해서만 종속적이며

키가 아닌 다른 특성들에는 종속되어선 안된다"

'프로그래밍&IT > 용어' 카테고리의 다른 글

JWT란 무엇인가? 그리고 사용하는 라이브러리  (1) 2024.09.20
RNR? R&R?  (0) 2022.07.09