포스트

SQLD: 정규화, 관계와 조인

이기적 SQL 이론 강의

1과목의 데이터 모델과 SQL 파트에 해당하는 부분으로, 설계도에서 정규화, 조인, 트랜잭션 등을 파악할 수 있는지 물어보는 문제들이 있다.

정규화

데이터에 대한 중복을 제거하고, 데이터가 관심사별로 처리되도록 엔터티를 쪼개 성능을 향상시키는 활동이다.

반정규화: 중복을 포함하며, 엔터티를 합치는 개념이다.

거의 대부분 정규화를 하지만, 간혹 특수한 사례에 대해 반정규화를 한다.

정규화시 입력/삭제/수정 연산의 성능이 무조건 향상되지만, 조회에 대해서는 성능의 향상 또는 저하가 발생할 수 있다.

입력/삭제/수정 - DML

함수적 종속

정규화를 하기 위해 알아야 하는 개념으로, 어떤 기준 값(컬럼=속성)에 의해 나머지 데이터가 종속되는 현상을 의미한다.

F(X) = Y

X를 결정자라고 했을 때, 나머지 속성들 Y가 종속되어 종속자가 된다.

상세 정규화 과정

image

비정규형에서 도메인 원자성이라는 조건을 만족시키면 1NF가 된다. 1NF는 1차정규화를 완료한 1차정규형이다. 1NF에서 부분종속성을 제거하면 2NF가 되며, 이행종속성제거를 하면 3NF가 된다.

메인원자성
분종속성제거
행종속성제거
정자제거
치종속
인속성

비정규형: 데이터가 중복이 되어있어 정규화가 필요한 상태의 데이터
도메인 원자성 = 1차정규화

1차정규화

엔터티에서 다중 속성이 있거나, 하나의 속성에 여러 속성값이 있으면 원자값으로 쪼개준다.

직원 ID이름연봉연락처
A0001강홍정5000010-1231-1234,
02-123-1234
A0002정치호600002-222-2222
A0003강태우7000010-3333-333

위 테이블과 같이 하나의 인스턴스의 속성에 두 개 이상의 값이 있다면 해당 인스턴스를 두 개의 인스턴스로 나누어 주는 것이다.

직원 ID이름연봉연락처
A0001강홍정5000010-1231-1234
A0001강홍정500002-123-1234
A0002정치호600002-222-2222
A0003강태우7000010-3333-333

(1차정규형)

도메인: 속성이 입력받을 수 있는 값의 범위

예: 나이는 숫자로, 0부터 150사이의 값

직원 ID이름연봉연락처주소1주소 2
A0001강홍정5000010-1231-1234중구 택지로 1번지서울 중앙 보훈기관 123호

위와 같은 형태로 같은 의미의 속성이 나누어져 있는 겨우 또한 정규화의 대상이다.

직원 ID이름연봉연락처주소
A0001강홍정5000010-1231-1234중구 택지로 1번지
A0001강홍정5000010-1231-1234서울 중앙 보훈기관 123호

즉, 1차 정규화란 도메인의 원자성을 확보하기 위한 활동이며, 이는 하나의 속성 아래에는 하나의 값만 있어야 하기 떄문에 이를 보장하기 위한 행동이다.

2차 정규화

2차 정규화는 1NF -> 2NF 형태로 엔터티를 변경하는 활동이다.

식별자에 부분 종속 하는 대상을 쪼개어 준다.

= 부분 종속 제거

3차 정규화

엔터티에서 일반속성끼리 함수종속이 발생하면 쪼개준다.

이행종속이란 특성 식별자 X로 Y를 식별할 수 있고, Y로 Z를 식별할 수 있으면 X도 Z를 식별한다는 것이다.

직원 ID이름연봉연락처부서ID부서명
A0001강홍정500002-123-1234D001인사부
A0002정치호600002-222-2222D002급여부
A0003강태우7000010-3333-333D001인사부

결정자 (직원ID) -> 종속자(나머지 컬럼들)

| 직원 ID | 이름 | 연봉 | 연락처 | 부서ID | | —— | —— | —— | —— | —— | | A0001 | 강홍정 | 5000 | 02-123-1234 | D001 | | A0002 | 정치호 | 6000 | 02-222-2222 | D002 | | A0003 | 강태우 | 7000 | 010-3333-333 | D001 |

부서ID부서명
D001인사부
D002급여부

관계와 조인

조인이란?

조인이란 식별자를 상속해 이를 이용하여 데이터를 결합해 여러 엔터티에서 필요한 데이터를 한번에 가져오는 것이다.

원래라면, 여러 엔터티를 모두 조회하여 필요한 정보를 하나씩 가져와야 하지만, 조인을 사용하여 한 번에 가져옴으로 성능적인 개선을 이룬다.

계층형 데이터 모델

계층구조를 가진 데이터를 저장한 모델 자기 자신의 엔터티와 관계가 발생하는 경우

image

상호배타적 관계

A와 B가 C집단에는 소속되어있지만, 서로 공통적인 부분이 없는 관계

image


Note: 설계도를 보고, 현재 어떤 상태인지 이해할 수 있는가를 판단하는 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.