티스토리 뷰

반응형

2026.05.13 - [데이터베이스] - 데이터베이스 제1정규화

데이터베이스 설계에서 제2정규화(Second Normal Form, 2NF)는 데이터 중복을 줄이고 무결성을 높이는 매우 중요한 단계입니다. 특히 복합키(Composite Key)를 사용하는 구조에서 발생하는 부분적 종속성을 해결하는 핵심 과정을 상세히 정리해 드립니다.


1. 제2정규화(2NF)의 정의와 성립 조건

정의

제2정규화란 "제1정규형을 만족하면서, 기본키(Primary Key)가 아닌 모든 속성이 기본키에 '완전 함수적 종속' 상태여야 한다"는 원칙입니다. 즉, 기본키의 일부분에만 의존하는 속성이 있어서는 안 된다는 뜻입니다.

  • 성립 조건 1: 테이블이 이미 제1정규형(1NF)을 만족해야 합니다.
  • 성립 조건 2 (완전 함수적 종속): 기본키가 여러 컬럼으로 구성된 복합키(Composite Key)일 때, 일반 컬럼은 복합키 전체에 의존해야지, 그중 하나의 컬럼에만 의존해서는 안 됩니다.
  • E.F. Codd의 이론: 1971년 제1정규형의 이상 현상을 해결하기 위해 발표되었으며, 주로 '부분 함수적 종속성(Partial Functional Dependency)' 제거에 초점을 맞춥니다.

2. 핵심 개념: 완전 함수적 종속 vs 부분 함수적 종속

개념 설명
함수적 종속 (FD) X의 값을 알면 Y의 값을 유일하게 결정할 수 있을 때, Y는 X에 함수적으로 종속된다고 함 ($X \to Y$)
완전 함수적 종속 기본키 전체가 있어야만 속성 값을 결정할 수 있는 경우
부분 함수적 종속 기본키가 복합키일 때, 키의 일부(일부 컬럼)만으로도 특정 속성을 결정할 수 있는 경우 (2NF 위반 대상)

3. 제2정규화 미적용 시 발생하는 이상 현상 (Anomaly)

기본키가 (학번, 과목코드)인 테이블에 강의실 정보가 포함되어 있고, 강의실이 과목코드에만 종속되어 있다면 다음과 같은 문제가 발생합니다.

  1. 삽입 이상: 학생이 수강 신청을 하지 않으면 특정 과목의 강의실 정보를 입력할 수 없음.
  2. 삭제 이상: 특정 학생의 수강 취소 시, 그 과목의 유일한 정보(강의실 위치)까지 함께 삭제됨.
  3. 갱신 이상: 특정 과목의 강의실이 변경될 때, 해당 과목을 듣는 모든 학생의 행을 수정해야 함 (데이터 불일치 위험).

반응형

4. 실전 예제: 수강 등록 테이블 분석

[Step 1] 제1정규화 완료 상태 (비정규화)

이 테이블의 기본키는 (학번, 과목코드)입니다.

학번 (PK) 과목코드 (PK) 성적 강의실
202601 CS101 A 공학관 101호
202601 CS102 B IT센터 205호
202602 CS101 A+ 공학관 101호
  • 분석:
    • 성적: 특정 학생이 특정 과목을 들었을 때 나오므로 (학번, 과목코드) 전체에 종속됨 (완전 종속 - OK)
    • 강의실: 학생과 상관없이 과목코드만 알면 결정됨 (부분 종속 - 2NF 위반)

[Step 2] 제2정규화 적용 (테이블 분리)

부분 함수적 종속성을 가진 강의실 속성을 별도의 테이블로 분리합니다.

1. 수강성적 테이블

학번 (PK) 과목코드 (PK) 성적
202601 CS101 A
202601 CS102 B
202602 CS101 A+

2. 과목정보 테이블

과목코드 (PK) 강의실
CS101 공학관 101호
CS102 IT센터 205호

5. SQL 구현 예제

제2정규화를 준수하여 테이블을 설계하는 표준 DDL입니다.

SQL
 
-- 1. 과목 마스터 테이블 (과목에 대한 독립적 정보 관리)
CREATE TABLE Subjects (
    SubjectCode VARCHAR(10) PRIMARY KEY,
    RoomName VARCHAR(50)
);

-- 2. 학생 마스터 테이블
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    StudentName VARCHAR(50)
);

-- 3. 수강 내역 테이블 (2NF 준수: 성적은 학번과 과목코드 조합에 의존)
CREATE TABLE Enrollments (
    StudentID INT,
    SubjectCode VARCHAR(10),
    Grade VARCHAR(2),
    PRIMARY KEY (StudentID, SubjectCode),
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
    FOREIGN KEY (SubjectCode) REFERENCES Subjects(SubjectCode)
);

6. 제2정규화 요약 및 체크리스트

항목 내용
대상 기본키가 2개 이상의 컬럼으로 구성된 복합키 테이블
핵심 작업 기본키의 일부분에만 의존하는 속성을 찾아내어 별도 테이블로 분리
판단 기준 "기본키 중 하나를 가려도 이 속성값을 알 수 있는가?" → Yes라면 분리 대상
장점 데이터 중복 감소, 삽입/삭제/갱신 이상 현상 방지

 

#데이터베이스 #제2정규화 #2NF #정규화 #Normalization #DB설계 #데이터모델링 #SQL #RDBMS #함수적종속 #백엔드개발 #기술면접 #정보처리기사 #데이터무결성 #복합키 #소프트웨어공학 #클린코드 #DB기초 #프로그래밍학습

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
반응형