SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

정규화와 관계대수

함수 종속과 이상 현상을 이용해 정규형을 판단하고 관계대수 연산을 SQL과 연결한다.

예상 읽기 6

1. 이상 현상과 함수 종속

다음 릴레이션은 학생과 과목 정보를 한 테이블에 함께 저장한다.

학생번호학생명과목번호과목명담당교수
S01김하나C10데이터베이스박교수
S01김하나C20운영체제이교수
S02이둘C10데이터베이스박교수

이 구조에서는 학생명과 과목명이 반복된다.

  • 삽입 이상: 수강생이 없는 새 과목을 등록하기 어렵다.
  • 갱신 이상: 과목명을 여러 행에서 일부만 수정하면 값이 불일치한다.
  • 삭제 이상: 마지막 수강 정보를 삭제하면서 과목 자체의 정보까지 사라질 수 있다.

함수 종속 X → Y는 같은 X 값을 가진 튜플들이 항상 같은 Y 값을 가진다는 뜻이다. 위 예에서는 다음 종속을 생각할 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
학생번호 → 학생명
과목번호 → 과목명, 담당교수
(학생번호, 과목번호) → 수강과 관련된 나머지 정보
  • 완전 함수 종속: 복합 결정자의 모든 속성이 있어야 종속이 성립한다.
  • 부분 함수 종속: 복합키의 일부만으로 일반 속성이 결정된다.
  • 이행 함수 종속: X → Y, Y → Z에 의해 X → Z가 간접적으로 성립한다.

2. 정규화 과정

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
비정규형
   │ 반복 속성·다중값 제거
   ▼
제1정규형(1NF)
   │ 부분 함수 종속 제거
   ▼
제2정규형(2NF)
   │ 이행 함수 종속 제거
   ▼
제3정규형(3NF)
   │ 모든 결정자를 후보키로
   ▼
BCNF
   │ 다치 종속 제거
   ▼
제4정규형(4NF)
   │ 비자명한 조인 종속 제거
   ▼
제5정규형(5NF)

1NF

모든 속성 값이 더 이상 나눌 필요가 없는 원자값이어야 한다. 한 셀에 전화번호 여러 개를 쉼표로 저장하는 방식은 1NF에 적합하지 않다.

2NF

1NF를 만족하고, 모든 비주요 속성이 어떤 후보키의 진부분집합에도 함수 종속되지 않아야 한다. 복합 후보키의 일부에만 종속되는 비주요 속성을 별도 릴레이션으로 분리한다.

3NF

2NF를 만족하고, 각 비자명한 함수 종속 X→A에서 X가 슈퍼키이거나 A가 주요 속성이어야 한다. 전형적으로 비주요 속성 사이의 이행 종속을 제거한다.

BCNF

모든 비자명한 함수 종속 X → Y에서 X가 슈퍼키여야 한다. 3NF보다 엄격하며, 후보키가 여러 개 겹치는 구조에서 차이가 나타날 수 있다.

3. 분해 예시

원래 릴레이션을 다음처럼 분해할 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
[수강원본]
(학생번호, 학생명, 과목번호, 과목명, 담당교수)
          │
          ├───────────────┐
          ▼               ▼
[학생]                  [과목]
PK 학생번호             PK 과목번호
   학생명                  과목명
                            담당교수
          \               /
           \             /
            ▼           ▼
             [수강]
             PK/FK 학생번호
             PK/FK 과목번호

분해할 때는 다음 성질을 확인한다.

  • 무손실 분해: 분해한 릴레이션을 자연조인했을 때 원래 정보가 정확히 복원된다.
  • 종속성 보존: 원래의 함수 종속을 조인하지 않고도 분해된 릴레이션에서 검사할 수 있다.

정규화는 중복과 갱신 이상을 줄이지만 조회 시 조인이 늘 수 있다. 성능을 이유로 의도적으로 중복을 허용하는 반정규화는 정확한 무결성 관리 방안이 있을 때 신중하게 적용한다.

4. 관계대수

관계대수는 릴레이션을 입력받아 새로운 릴레이션을 결과로 만드는 절차적 연산 체계이다.

연산기호의미SQL 대응 예
선택σ조건을 만족하는 행 선택WHERE
투영π필요한 열 선택SELECT 열
합집합두 릴레이션의 튜플 합침UNION
차집합한쪽에만 있는 튜플EXCEPT 또는 MINUS
카티션곱×모든 튜플 조합CROSS JOIN
조인관련 속성 조건으로 결합JOIN ... ON
교집합양쪽에 공통인 튜플INTERSECT
나눗셈÷모든 조건 대상을 만족하는 튜플이중 NOT EXISTS

예를 들어 급여가 5,000 이상인 사원의 이름을 구하는 관계대수는 다음처럼 읽는다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
π emp_name ( σ salary >= 5000 (EMPLOYEE) )

SQL로는 다음과 같다.

SQL코드 영역 안에서 좌우로 이동할 수 있습니다.
SELECT emp_name
FROM employee
WHERE salary >= 5000;

조인은 카티션곱 후 조건에 맞는 튜플만 선택하는 연산으로 이해할 수 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
EMPLOYEE ⋈ EMPLOYEE.dept_id = DEPARTMENT.dept_id DEPARTMENT

5. Armstrong 공리와 후보키 계산

  • 반사성: Y⊆X이면 X→Y
  • 증대성: X→Y이면 XZ→YZ
  • 이행성: X→Y, Y→Z이면 X→Z
CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
R(A,B,C,D,E), F={A→BC, C→D, BD→E}
A+={A,B,C,D}; B와 D가 있으므로 BD→E 적용
A+={A,B,C,D,E}

6. 3NF의 정확한 조건과 BCNF

함수 종속 X→A마다 다음 중 하나면 3NF다.

  1. A∈X인 자명 종속
  2. X가 슈퍼키
  3. A가 어떤 후보키에 포함되는 주요 속성

BCNF는 세 번째 예외를 허용하지 않는다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
R(학생,과목,교수)
(학생,과목)→교수, 교수→과목
후보키=(학생,과목),(학생,교수)

교수→과목의 결정자 교수는 슈퍼키가 아니므로 BCNF를 위반하지만, 과목은 주요 속성이므로 3NF는 만족할 수 있다.

7. 무손실 분해와 종속성 보존

R을 R1,R2로 분해할 때 공통 속성 R1∩R2가 R1 전체 또는 R2 전체를 결정하면 이진 분해는 무손실이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
R(A,B,C), F={A→B}
R1(A,B), R2(A,C)
공통 A가 R1 전체를 결정 → 무손실

BCNF 분해는 무손실이어도 일부 함수 종속을 분해된 한 관계에서 직접 검사하지 못할 수 있다. 3NF 합성은 최소 커버를 기준으로 관계를 만들고 후보키 관계를 보완해 무손실과 종속성 보존을 함께 얻기 쉽다.

8. 4NF와 관계 나눗셈

학생의 취미와 자격증이 독립적인 다중값이면 student↠hobby, student↠certificate로 조합 중복이 생겨 4NF 분해 대상이 된다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
ENROLL(student,course) ÷ REQUIRED(course)
= 필수 과목을 모두 수강한 학생

SQL에서는 “수강하지 않은 필수 과목이 존재하지 않는다”는 이중 NOT EXISTS로 표현할 수 있다.

확인 문제

  1. 3NF의 주요 속성 예외를 설명하라.
  2. BCNF의 결정자 조건은?
  3. R(A,B,C), A→B를 R1(A,B),R2(A,C)로 분해하면 무손실인가?
  4. 종속성 보존의 의미는?
  5. 관계 나눗셈의 대표 질의는?