JangGeonWu
janggeonwu97
JangGeonWu
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • SQLD (21)
    • 개인 공부용 (17)
    • Django (9)
    • Tableau (6)
    • ElasticSearch (8)
    • 빅데이터 엔지니어 (5)
    • Spring 퀵 스타트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개인 공부 기록용 블로그

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
JangGeonWu
SQLD

1-2-1. 정규화

SQLD

1-2-1. 정규화

2022. 9. 19. 15:40

1. 제1정규형: 모든 속성은 반드시 하나의 값을 가져야 한다.

 - 하나의 속성에는 하나의 값을 가저야 함. 즉, 다중 값을 가져서는 안 된다.

 

 

고객번호 고객명 연락처
10000 김OO 02-123-4567, 010-1234-5678

 

위와 같은 엔티티를

 

고객번호 고객명
10000 김OO
고객번호 순번 연락처
10000 1 01-123-4567
10000 2 010-1234-5678

위처럼 수정하여 다중값을 제거하면 된다.

 

-> 다중값 제거

 

2. 제2정규형: 엔터티의 일반 속성은 주식별자 전체에 종속적이어야 한다.

 - 함수 종속성(Functional Dependency)은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭한다.

 - 이때, 기존 값을 결정자(Determinent)라고 하고, 종속되는 값을 종속자(Dependent)라고 한다. 

 

아래의 표에서 왼쪽은 주식별자, 오른쪽은 일반속성이라고 하자.

주문번호(FK) & 상품번호 상품명
20220901JQB & CHKQ0138 OO 청소기
20220901JQC & QOBH0582 XX 세탁기

- 여기서 상품명은 식별자 전체(주문번호 & 상품번호)가 아닌 일부(상품번호)에만 종속적이다. 이를 '부분 종속'이라고 한다.

 

따라서, 엔터티를 추가하여 부분 종속 문제를 해결하면 된다.

 

주문번호(FK) 상품번호(FK)
20220901JQB  CHKQ0138
20220901JQC  QOBH0582
상품번호 상품명
CHKQ0138 OO 청소기
QOBH0582 XX 세탁기

 

-> 부분종속 제거

 

3. 제3정규형: 엔터티의 일반 속성 간에는 서로 종속적이지 않는다.

아래의 표를 보자.

주문번호 고객번호 고객명 고객주소
20220901JQB  10000 김OO ABCDE

일반 속성인 '고객명과 고객 주소'는 일반 속성인 '고객번호'에 종속적이다. 이를 이행적 종속(Transitive Dependency)라고 한다.

 

예시를 들어보자. 고객이 이사를 해서 '고객 주소'를 변경하게 되면, 위 엔터티의 모든 '고객 주소'를 갱신해야 한다. 똑같이 고객이 자신의 익명성을 위해 고객명을 수정하면, 위 엔터티의 모든 '고객명'을 갱신해야 한다.

 

이러한 이행적 종속을 해결하기 위해서는, 위 엔터티를 분리해서 관리해야 한다.

 

주문번호 고객번호
20220901JQB  10000
고객번호 고객명 고객주소
10000 김OO ABCDE

-> 이행종속 제거

 

정규화는 필수적이지만 무조건적이진 않다. 반 정규화를 진행할 수도 있는데, 이때 '정규화를 진행한 후'에 반 정규화를 진행하는 것이 전제로 깔려있다.

 

4. 반정규화와 성능

 - 반 정규화는 위의 정규화를 반대로 하는 것을 의미한다. 즉, 성능을 위해 데이터 중복을 허용하는 것이다. 엔티티가 합쳐지니, '조회'에서는 유리해질 수밖에 없다.

 - 반 정규화는 '조회 성능'을 향상시킬 수 있으나, '입력/수정/삭제' 성능은 저하될 수 있다.

 

항상 유의해야 하지만, 반정규화가 꼭 필요한지 검증해보고, 다른 방법은 없는지 검토한 다음에 반정규화를 적용해야 한다.

 

 


Quiz.

Q1. 각각의 정규화를 설명하여라.

 - 제 1정규형: 모든 속성은 반드시 하나의 값을 가져야 한다 -> (               ) 제거

 - 제 2정규형: 엔티티의 일반속성은 주식별자 전체에 종속적이어야 한다 -> (                  ) 제거

 - 제 3정규형: 엔티티의 일반속성 간에는 서로 종속적이지 않는다. -> (                    ) 제거

 

 

 

 

 

 

 

 

 

 

'SQLD' 카테고리의 다른 글

1-2-3. 모델이 표현하는 트랜잭션의 이해  (0) 2022.09.19
1-2-2. 관계와 조인의 이해  (1) 2022.09.19
1-1-5. 식별자  (1) 2022.09.19
1-1-4. 관계  (0) 2022.09.19
1-1-3. 속성  (0) 2022.09.19
  • 1. 제1정규형: 모든 속성은 반드시 하나의 값을 가져야 한다.
  • 2. 제2정규형: 엔터티의 일반 속성은 주식별자 전체에 종속적이어야 한다.
  • 3. 제3정규형: 엔터티의 일반 속성 간에는 서로 종속적이지 않는다.
  • 4. 반정규화와 성능
'SQLD' 카테고리의 다른 글
  • 1-2-3. 모델이 표현하는 트랜잭션의 이해
  • 1-2-2. 관계와 조인의 이해
  • 1-1-5. 식별자
  • 1-1-4. 관계
JangGeonWu
JangGeonWu

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.