📘꼬부기의 성장서재/이기적SQLD 기출문제

정규화

서화 2026. 3. 4. 17:25

정규화란 

데이터 이상현상을 방지하기 위해 논리적인 데이터 모델링 과정에서 반드시 수행되는 과정으로 엔터티를 분리해 데이터의 품질을 향상 시키는 작업이다

이상현상

데이터 중복이나 부정확한 구조로 인해서 데이터의 일관성이 깨짐

삽입이상(INSERT) -> 데이터 입력시 원치않는 정보가 입력되거나 원하는 정보를 입력할수 없는 현상

예시) 학생의 정보를 입력할때 교수의 이름과 아이디까지 알아야한다면 삽입 이상이므로 학생엔터티와 교수엔터티를 분리한다

갱신이상(UPDATE)->데이터 변경시 일관성이 깨지는것을 말한다

예시 )학생엔터티가 학생ID와 이름,연락처를 가지고 있다고 했을때 학생정보 수정시 일관성이 깨지게 되므로 학생과 연락처를 분리한다

삭제이상(DELETE) ->데이터 삭제를 원하지 않은 데이터도 삭제되는 현상 

예시)학생과 교수의 엔터티를 분리하지 않으면 학생 정보를 삭제할때 교수도 삭제되기때문에 엔터티를 분리해야한다

함수적 종속개념

어떤 속성A의 값에 따라 속성 B가 결정될때 이를 함수적 종속이라고 하고 A를 결정자,B를 종속자라고함

정규화 진행

각 단계는 반드시 이전 단계를 완료해야 다음 단계를 넘어갈수 있고 건너띌수 없다 정규화를 하면 정규형이된다

비정규형 →정규화 진행 하기전 상태, 중복데이터가 있는 엔터티

1차정규화 → 도메인원자성확보가 목표

도메인원자성 : 도메인이 다중값이거나 비슷한 속성이 여러개면 쪼개서 원자적으로 하나만 둬야함

예시) A의 핸드폰 번호가 두개이면 번호당 이름이 하나가 되게 만든다

2차 정규화 → 1차 정규형에서 부분종속제거를 해준다

부분 종속제거란 식별자를 제거한 나머지 모든 속성들이 식별자에 종속되지 않고 식별자의 부분속성이 일부 속성을 종속할때 이것을 제거하는것이다

학번,과목코드가 식별자일때 학생이름과 과목명은 일반 속성으로 함수에 종속할수있다

여기서 과목코드만으로도 과목명을 유일하게 식별할수 있는데 이것을 부분 함수 종속이라고 하며 2차 정규화는 이것을 제거하는것이다

제거하는 방법으로는 먼저 부분 종속된 속성들을 뜯어서 분리한다 여기서는 과목코드와 과목명이 되겟다

학생이 어떤 과목을 들었는지 알기위해서 연관성이필요하다 따라서 과목코드를 다시 학생쪽에 외부식별자로 붙여준다

이렇게 하면 과목도 과목코드 식별자에 완전 함수 종속하고 학생도 학번 식별자에 나머지 속성이 모두 완전함수종속하게 되었다

부분 종속제거는 한번에 안끝나는 경우가 있어 반복적으로 해야할수도 있다

3차 정규화 →2차 정규형에서 이행종속제거를 해준다

이행종속성이란 식별자가 이닌 일반속성들끼리 함수 종속이 발생하는 경우이며 이것을 제거하는것이 이행종속제거이다

현재 식별자인 사원이 부서코드, 부서명을 유일하게 식별하고 있어서 완전 함수 종속 상태인데 식별자가 아닌 부서코드가 부서명을 식별하고 있으므로 이것이 이행 종속이라고 하고 이것을 제거해 주어야한다

정규화의 방식은 2차와 같다

 식별자인 사번과 부서코드,부서명을 뜯어서 분리한다

데이터의 논리적 연결을 위해 사번에 부서코드를 외부식별자로 연결해준다

반정규화

반정규화란 정규화 된 엔터티를 다시 합치거나 중복을 허용하는 것,조회성능향상의 목적이 있음 단점으로는 데이터의 품질이 떨어짐

정규화는 논리적 모델링에서 진행할수 있고 반정규화는 물리적 모델링에서 진행할수 있는데 필수는 아니고 선택사항이다

정규화가 잘 진행된 회원 엔터티와 회원연락처 엔터티가 있다 여기서 회원ID가 aaa인 사람의 번호와 회원명을 조회하려면 회원과 회원연락처를 조회해야한다 반정규화를 사용하면 테이블을 하나만 확인해도 정보를 확인할 수 있다

--정규화--
SELECT A.회원명,B.연락처 FROM 회원A,회원 연락처 B
WHERE A.회원ID = B.회원ID
AND A.회원ID = 'aaa'
AND B.구분코드 ='핸드폰';

--반정규화--
SELECT 연락처 FROM 회원 
WHERE 회원ID = 'aaa'
AND B.구분코드 ='핸드폰';

 반정규화 결정 단계

정규화 진행 -> 조회성능 분석->대안검토->최종 반정규화 진행

대안으로 파티셔닝을 사용할수 있는데 파티셔닝이란 엔터티를 내부적으로 쪼개 놓는것이다

정규화vs반정규화 성능 비교

정규화 -> 조회성능이 향상/감소될수 있으나 조작성능(삽입,수정,삭제)은 무조건 향상

반정규화 ->조회성능 향상,조작성능 감소

 

 

 

 

'📘꼬부기의 성장서재 > 이기적SQLD 기출문제' 카테고리의 다른 글

서브쿼리  (0) 2026.03.06
SELECT 문  (0) 2026.03.05
식별자  (0) 2026.03.04
관계  (0) 2026.03.04
속성  (0) 2026.03.04