빅데이터 자격증 1주일 만에 합격하는 SQLD 자격증 올인원
[SQLD] 메타코드 강의 후기_1과목 - 정규화 수정

메타코드M
실무 위주 환급형 부트캠프 [데이터 분석 / AI LLM / 생성형 AI 직무 활용]ㅣ600만 조회수 기록 + 수강생 6만명 검증
www.metacodes.co.kr
이번 차시는 아래와 같습니다!
정규화는 데이터의 중복을 최소화하고 일관성 및 무결성을 보장하기 위해 테이블 구조를 체계화하는 과정이며,
각 정규형은 단일 값의 속성 보장, 부분 함수 종속성 제거, 이행 종속성 제거를 목표로 하며,
반면, 반정규화는 성능 향상을 위해 의도적으로 정규화된 구조를 역행하여 데이터의 조인 감소 등을 시도하는 방법으로 정의됩니다.
이를 통해 데이터 중복 문제와 데이터 불일치 문제를 해결하는 방법을 제시합니다.
이어서 제1정규형(1NF), 제2정규형(2NF), 그리고 제3정규형(3NF)의 구체적인 규칙과 위반 사례를 설명합니다.
특히 **정규화(Normalization)**와 **반정규화(Denormalization)**라는 데이터베이스 설계의 핵심 개념에 초점을 맞춥니다.

정규화(Normalization)와 반정규화(Denormalization)의 개념
데이터 모델링에서 정규화와 반정규화는 데이터 구조의 무결성과 시스템 성능 사이의 균형을 맞추기 위한 상호 보완적인 전략이다.
정규화 (Normalization)
정규화는 "데이터베이스에서 데이터들을 효율적으로 저장하고 중복을 최소화하기 위해서 데이터 테이블을 구조화하는 과정"으로 정의된다. 핵심 목표는 데이터의 일관성을 유지하고 저장소의 무결성을 보장하는 것이다.
성능에 미치는 영향:
- 조회 성능: 정규화 수준이 높아질수록 테이블이 여러 개로 분리된다.
이로 인해 원하는 데이터를 얻기 위해 다수의 테이블을 결합하는 조인(JOIN) 연산이 필요해지며,
이는 쿼리 처리 시간을 증가시켜 조회 성능을 저하시킬 수 있다. 따라서 정규화가 조회 성능을 항상 향상시키는 것은 아니다. - 입력/삭제/수정 성능: 데이터 중복이 최소화되므로 특정 데이터를 수정할 때 하나의 레코드만 변경하면 된다.
이로 인해 데이터 불일치 위험이 감소하고, 데이터의 입력, 삭제, 수정 성능은 일반적으로 향상된다.
반정규화 (Denormalization)
반정규화는 "성능 향상을 위해 정규화된 데이터베이스 구조를 일부러 역행하는 과정"이다.
정규화된 구조가 데이터 무결성 유지에는 유리하지만 복잡한 쿼리에서 성능 저하를 유발할 수 있기 때문에,
반정규화는 이러한 성능 문제를 해결하기 위해 사용된다.
주요 방법으로는 데이터를 의도적으로 중복 저장하거나 테이블 간 조인을 줄이는 방식이 있다.
| 구분 | 정규화 (Normalization) | 반정규화 (Denormalization) |
| 목표 | 데이터 중복 최소화, 일관성 및 무결성 확보 | 쿼리 성능 향상 |
| 방법 | 테이블 분리를 통한 종속성 제거 | 테이블 병합, 데이터 중복 허용 |
| 장점 | 데이터 무결성 강화, 입력/수정/삭제 성능 향상 | 조회 성능 향상, 쿼리 단순화 |
| 단점 | 조회 성능 저하 가능성, 조인 복잡성 증가 | 데이터 중복 증가, 무결성 유지 어려움 |


정규화의 단계
정규화는 여러 단계로 구성되며, 일반적으로 제3 정규형까지 만족시키는 것을 목표로 한다.
제1 정규형 (1NF - First Normal Form)
제1 정규형은 테이블의 모든 속성(열)에 저장되는 값이 원자값(Atomic Value),
즉 더 이상 분리될 수 없는 단일 값이어야 한다는 원칙이다.
주요 위반 사례:
- 하나의 속성에 여러 값이 포함된 경우:
- 문제점: 아래 [표 1]에서 앨리스(Alice) 학생은 Course_ID 속성에 '101'과 '103'이라는 두 개의 값을 동시에 가지고 있다. 이는 제1 정규형을 위반한다.
- 해결책: [표 2]와 같이 각 값을 별도의 행으로 분리하여 모든 속성값이 단일 값을 갖도록 수정한다.
- 유사한 속성이 반복되는 경우:
- 문제점: Phone1, Phone2와 같이 유사한 의미를 가진 속성이 여러 개의 열로 나열되는 경우도
제1 정규형 위반으로 간주된다. - 해결책: 이를 Phone이라는 단일 속성으로 통합하고 각 전화번호를 별도의 행으로 구성하여 해결한다.
- 문제점: Phone1, Phone2와 같이 유사한 의미를 가진 속성이 여러 개의 열로 나열되는 경우도




제2 정규형 (2NF - Second Normal Form)
제2 정규형은 제1 정규형을 만족해야 하며, 테이블의 모든 속성이 기본 키 전체에 완전하게 종속되어야 한다는 조건을 요구한다.
이는 복합 기본 키를 사용하는 테이블에서 부분 함수 종속성을 제거하는 것을 의미한다.
부분 함수 종속성: 복합 기본 키의 일부에만 속성이 종속되는 경우를 말한다.
예시 분석: 아래 [표 3]은 (Student_ID, Course_ID)를 복합 기본 키로 사용한다.
- Student_Name은 기본 키의 일부인 Student_ID에만 종속된다.
- Course_Name과 Instructor는 기본 키의 일부인 Course_ID에만 종속된다.
2NF 위반 시 발생하는 문제점:
- 데이터 중복 문제: Course_ID가 '101'인 과목 정보('Math', 'Smith')가 여러 행에 걸쳐 중복 저장된다.
데이터가 수조 개에 이르면 막대한 저장 공간 낭비를 초래한다. - 데이터 불일치 문제 (수정 이상): 만약 수학 과목의 교수가 'Smith'에서 'Brown'으로 변경될 경우, 'Math'가 포함된 모든 행을 찾아 수정해야 한다. 하나라도 누락되면 데이터 불일치가 발생한다.
- 데이터 무결성 문제 (삽입/삭제 이상):
- 삽입 이상: 아직 수강 신청을 하지 않은 신규 학생 '릭(Rick)'을 추가할 수 없다. Course_ID가 기본 키의 일부이므로 NULL 값을 가질 수 없기 때문이다.
- 삭제 이상: 특정 학생이 과목 수강을 취소하여 해당 행을 삭제하면, 그 과목 정보(예: 'Science' 과목)가 데이터베이스에서 완전히 사라질 수 있다.
해결책: 부분 종속성을 제거하기 위해 테이블을 아래와 같이 세 개로 분리한다.


제3 정규형 (3NF - Third Normal Form)
제3 정규형은 제2 정규형을 만족해야 하며, 이행적 종속성(Transitive Dependency)이 없어야 한다는 조건을 요구한다.
이행적 종속성은 기본 키가 아닌 속성이 다른 일반 속성에 종속되는 관계를 의미한다.
예시 분석: 아래 [표 4]에서 기본 키는 Student_ID이다.
- Professor_ID는 기본 키인 Student_ID에 종속된다 (A -> B).
- Professor_Name은 일반 속성인 Professor_ID에 종속된다 (B -> C).
- 따라서 Professor_Name은 기본 키인 Student_ID에 이행적으로 종속된다 (A -> B -> C).
해결책: 이행적 종속성을 제거하기 위해 각 속성이 기본 키에 직접 종속되도록 테이블을 분리한다.
이러한 분리를 통해 모든 속성이 적절한 기본 키에 직접 종속되도록 만들어 데이터베이스의 무결성과 일관성을 보장할 수 있다.
위 기초내용을 다 들어보았는데요!
어떠셨나요?
감이 오셨죠? ㅎㅎ
다음차시도 힘내보자구요 !!
아래 유튜브 링크도 참조해드릴테니, 참고해주세요!
'SQLD' 카테고리의 다른 글
| [SQLD] 메타코드 강의 후기_1과목 - 관계 식별자 (0) | 2025.10.15 |
|---|---|
| [SQLD] 메타코드 강의 후기_1과목 - 데이터 모델링의 이해 - 파트 2 (0) | 2025.10.02 |
| [SQLD] 메타코드 강의 후기_1과목 - 데이터 모델링의 이해 - 파트 1 (0) | 2025.09.22 |