학습 개요
- 동일한 역할을 할 수 있는 릴레이션 스키마라도 속성들을 어떻게 구성하는 지에 따라 데이터베이스의 효율성이 크게 달라짐
- 정규화는 데이터 모델링의 결과로 생성된 릴레이션에서 저장된 데이터의 패턴을 참조하여 정규화하여 정보 중복으로 발생할 수 있는 문제점(삽입, 수정, 삭제 이상)을 방지하도록 스키마를 재구조화하는 중요한 개념임
- 정규화를 위한 함수적 종속성, 클로저와 카노니컬 커버에 대하여 학습하고 정규형의 조건에 따라 정규화를 수행하는 방법에 대해 알아봄
주요 용어
- 정규화
- 이상 현상이 발생할 가능성을 차단하기 위해 원칙을 기반으로 효과적으로 스키마를 모델링하는데 이용되는 기법
- 함수적 종속성
- 특정 시점의 릴레이션 인스턴스에서 한 속성의 값이 다른 속성의 값을 결정하는 속성 간의 연관 관계
- 클로저
- 함수적 종속성 집합에서 추론 규칙을 사용하여 감춰진 함수적 종속성을 찾아낸 확장된 함수적 종속성 집합
- 카노니컬 커버
- 함수적 종속성 집합에서 의미적인 자명성과 중복성을 제거한 최소화된 함수적 종속성 집합
- 정규형
- 삽입, 수정, 삭제 등의 이상 발생을 방지하기 위해 릴레이션과 속성을 조건에 따라 재구성한 형식
강의록
좋은 릴레이션과 나쁜 릴레이션
나쁜 릴레이션의 예
고객번호 | 고객명 | 전화번호 | 등급 | 할인율 |
---|---|---|---|---|
C1 | 유관순 | 010-9999-0001 | GOLD | 5% |
C2 | 손병희 | 010-9999-0002 | VIP | 10% |
C3 | 지청천 | 010-9999-0003 | VIP | 10% |
C4 | 안창호 | 010-9999-0004 | GOLD | 5% |
C5 | 안중근 | 010-9999-0005 | VIP | 10% |
- 등급에 따른 할인율이 여러 레코드에 중복 저장 됨
잘못된 데이터베이스 모델링의 문제점
- 데이터의 중복
- 일관성 유지의 어려움
- 데이터를 수정할 때 관련된 모든 중복 데이터를 찾아 똑같이 수정해야 함
- 누락 시 데이터 불일치 발생
- 저장 공간 낭비
- 불필요하게 같은 데이터가 여러 번 저장됨
- 일관성 유지의 어려움
- 갱신 이상
- 데이터 중복으로 인해 데이터 삽입, 삭제, 수정 시 원치 않는 문제가 발생하는 현상
- 삽입 이상
- 레코드 추가 시 불필요한 컬럼 값 없이는 추가하지 못하는 경우
- 새 데이터를 삽입하려 할 때, 불필요한 다른 데이터 값이 없으면 삽입하지 못하는 경우
- ex) 새로운 등급 ‘NEW’, 할인율 ‘3%’를 추가하고 싶지만, 해당 등급의 고객 정보(고객번호 등)가 없으면 추가할 수 없음
- 레코드 추가 시 불필요한 컬럼 값 없이는 추가하지 못하는 경우
- 삭제 이상
- 삭제 시 의도하지 않았던 다른 데이터가 삭제되는 경우
- 특정 레코드를 삭제할 때, 의도하지 않았던 다른 유용한 정보까지 함께 삭제되는 경우
- ex) 등급이 ‘NEW’인 유일한 고객 ‘윤봉길’을 삭제하면, ‘NEW’ 등급의 할인율이 ‘3%’라는 정보까지 사라짐
- 삭제 시 의도하지 않았던 다른 데이터가 삭제되는 경우
- 수정 이상
- 일부 레코드 수정 시 데이터의 일관성이 훼손되는 경우
- 특정 값을 수정할 때, 중복된 데이터 중 일부만 수정되어 데이터의 일관성이 훼손되는 경우
- ex) ‘GOLD’ 등급의 할인율을 8%로 변경 시, ‘GOLD’ 등급 고객 레코드를 모두 찾아 수정해야 하며, 하나라도 누락하면 같은 ‘GOLD’ 등급인데 할인율이 다른 데이터 불일치 발생
- 일부 레코드 수정 시 데이터의 일관성이 훼손되는 경우
갱신 이상 - 삽입 이상
‘NEW’ 등급, 할인율 ‘3%’ 정보를 추가하고 싶지만, 해당 등급의 고객이 아직 없어 고객번호, 고객명, 전화번호 정보 없이는 삽입 불가
고객번호 고객명 전화번호 등급 할인율 C1 유관순 010-9999-0001 GOLD 5% C2 손병희 010-9999-0002 VIP 10% C3 지청천 010-9999-0003 VIP 10% C4 안창호 010-9999-0004 GOLD 5% C5 안중근 010-9999-0005 VIP 10% 불필요한 정보
고객번호 고객명 전화번호 ???? ??? ??????? 추가하고자 하는 정보
등급 할인율 NEW 3%
갱신 이상 - 삭제 이상
‘NEW’ 등급의 할인율이 ‘3%’라는 정보를 삭제하려고 하면 ‘C6 윤봉길’ 정보도 사라짐
고객번호 고객명 전화번호 등급 할인율 C1 유관순 010-9999-0001 GOLD 5% C2 손병희 010-9999-0002 VIP 10% C3 지청천 010-9999-0003 VIP 10% C4 안창호 010-9999-0004 GOLD 5% C5 안중근 010-9999-0005 VIP 10% C6 윤봉길 010-9999-0006 NEW 3% 삭제 하면 안되는 정보
고객번호 고객명 전화번호 C6 윤봉길 010-9999-0006 삭제하고자 하는 정보
등급 할인율 NEW 3%
갱신 이상 - 수정 이상
특정 ‘VIP’ 등급 할인율을 10%에서 8%로 변경 시, 데이터 불일치 발생
고객번호 고객명 전화번호 등급 할인율 C1 유관순 010-9999-0001 GOLD 5% C2 손병희 010-9999-0002 VIP 10% → 8% C3 지청천 010-9999-0003 VIP 10% → 8% C4 안창호 010-9999-0004 GOLD 5% C5 안중근 010-9999-0005 VIP 10% → 10% (수정 실패) C6 윤봉길 010-9999-0006 NEW 3% - 할인율 컬럼 비일관성
좋은 릴레이션의 개념
- 컴퓨터 프로그래머적 관점에서의 모델
- 어떻게 데이터를 저장해야 하는가?
- 릴레이션 스키마가 얼마나 효율적으로 실세계를 반영하고 있는지 평가
- 고려 사항
- 릴레이션 내의 컬럼 간의 관계 분석
- 불필요한 데이터의 종속과 중복 제거
- 새로운 컬럼들이 데이터베이스에 추가될 때, 기존 컬럼과의 관계 수정을 최소화
좋은 릴레이션
나쁜 릴레이션 | 고객번호 | 고객명 | 전화번호 | 등급 | 할인율 | |—|—|—|—|—| | C1 | 유관순 | 010-9999-0001 | GOLD | 5% | | C2 | 손병희 | 010-9999-0002 | VIP | 10% | | C3 | 지청천 | 010-9999-0003 | VIP | 10% | | C4 | 안창호 | 010-9999-0004 | GOLD | 5% | | C5 | 안중근 | 010-9999-0005 | VIP | 10% | | C6 | 윤봉길 | 010-9999-0006 | NEW | 3% |
좋은 릴레이션
고객번호 고객명 전화번호 등급(FK) C1 유관순 010-9999-0001 GOLD C2 손병희 010-9999-0002 VIP C3 지청천 010-9999-0003 VIP C4 안창호 010-9999-0004 GOLD C5 안중근 010-9999-0005 VIP C6 윤봉길 010-9999-0006 NEW 등급(PK) 할인율 GOLD 5% VIP 10% NEW 3% 두 개의 릴레이션으로 분리
- 데이터 중복 감소 (할인율 정보는 등급 테이블에 한 번만 저장)
- 갱신 이상 문제 해결
- 삽입: 새로운 등급을 등급 테이블에 바로 추가 가능
- 삭제: ‘윤봉길’ 고객 삭제 시에도 ‘NEW’ 등급 정보는 등급 테이블에 유지됨
- 수정: ‘GOLD’ 할인율 변경 시 등급 테이블의 한 행만 수정하면 됨
함수적 종속성의 이해
함수적 종속성 개념
- FD(Functional Dependency)
- 릴레이션 인스턴스를 분석하여 속성들 간의 연관 관계를 표현한 것
- 릴레이션의 효율성을 향상시켜 좋은 릴레이션으로 변환하는데 이용되는 중요한 개념
- 형식적 정의
- 임의의 릴레이션 스키마 R의 인스턴스 r(R)에 포함되는 서로 다른 두 레코드 r1, r2가 컬럼 X와 Y에 대해, r1[X] = r2[X]일 때, r1[Y] =r2[Y]이면 함수적 종속성 X → Y가 성립함
- X는 결정자(Determinant)
- Y는 종속자(Dependent)
- 임의의 릴레이션 스키마 R의 인스턴스 r(R)에 포함되는 서로 다른 두 레코드 r1, r2가 컬럼 X와 Y에 대해, r1[X] = r2[X]일 때, r1[Y] =r2[Y]이면 함수적 종속성 X → Y가 성립함
함수적 종속성의 판별
- 서로 다른 두 개의 레코드에서 어떤 특정 컬럼 값이 같으면 다른 컬럼 값도 같아질 때 함수적으로 종속한다고 표현 함
- X → Y
- 모든 레코드를 대상으로 항상 만족할 때 어떤 컬럼 X 가 Y를 종속함
- 같을 때만 같으면 됨
- 다를 때에는 같아도 되고 달라도 됨
- 서로 다른 두 레코드 값이 같으면 종속자 컬럼의 값도 같아야함
- 결정자에 같은 값이 없다면 종속자 컬럼의 값은 상관 없음
간단히 보이는 릴레이션 내부에도 많은 수의 함수적 종속성이 존재하기도 함
- 등급 컬럼이 할인율 컬럼을 함수적으로 종속하는 릴레이션
- {등급} - 결정자, {할인율} - 종속자
고객번호 고객명 전화번호 등급 할인율 C1 유관순 010-9999-0001 GOLD 5% C2 손병희 010-9999-0002 VIP 10% C3 지청천 010-9999-0003 VIP 10% C4 안창호 010-9999-0004 GOLD 5% C5 안중근 010-9999-0005 VIP 10% C6 윤봉길 010-9999-0006 NEW 3% - 등급이 같으면 할인율도 같음
- 등급 컬럼이 할인율 컬럼을 함수적으로 종속함
- {등급} → {할인율}
- 복수 개의 컬럼을 암시하는 집합 기호
- 함수적 종속성
- 고객번호 → 고객명
- 고객명 → 등급
- {고객번호, 고객명} → 할인율
- 최종 함수적 종속성
- 고객번호 → {고객명, 등급, 할인율}
- 고객번호의 값을 알면 고객명, 전화번호, 등급을 유일하게 결정할 수 있음
- 고객번호 → 고객명
- 고객번호 → 전화번호
- 고객번호 → 등급
- 고객번호 → {고객명, 전화번호, 등급} 으로 표현 가능
함수적 종속성의 확장
- 함수적 종속성은 릴레이션의 효율성 여부에 중요한 판단 기준
- 그러나 릴레이션의 인스턴스만으로 내재 된 모든 함수적 종속성을 찾아내기 어려움
- 판별되지 않은 모든 함수적 종속성을 도출하기 위해 추론 규칙 등을 사용하여 함수적 종속성을 확장
클로저(closure)
- 판별된 함수적 종속성 집합으로부터 유추할 수 있는 모든 함수적 종속성 집합
함수적 종속성 추론 규칙
- 암스트롱 공리(Armstrong’s axiom)
- 재귀성 규칙 : X⊇Y 이면, X→Y 이다.
- 어떠한 컬럼의 도메인이 다른 컬럼의 도메인보다 더 큰 집합이라면 (포함 관계를 갖고 있다면) 포함 하고 있는 컬럼이 포함 된 컬럼을 종속함
- 부가성 규칙 : X→Y 이면, XZ→YZ 이다.
- 결정자와 종속자의 부가적으로 동일한 컬럼을 합쳤을 때 종속 관계가 유지됨
- 이행성 규칙 : X→Y 이고, Y→Z 이면, X→Z 이다.
- 분해 규칙 : X→YZ 이면, X→Y 이다.
- X라는 컬럼이 Y, Z 두개 컬럼을 종속 하고 있는 경우 Y를 종속하고 Z도 종속함
- 합집합 규칙 : X→Y 이고, X→Z 이면, X→YZ 이다.
- 의사 이행성 규칙 : X→Y 이고, WY→Z 이면, WX→Z 이다.
- 재귀성 규칙 : X⊇Y 이면, X→Y 이다.
카노니컬 커버
- 함수적 종속성 추론 규칙으로 확장된 클로저에는 자명한 종속성과 중복된 종속성을 포함
- 자명한 종속성
- A → A 의미가 당연
- 중복 된 종속성
- X → AB, X → B 의미가 여러 번 존재
- 자명한 종속성
- 불필요한 함수적 종속성을 제거한 표준형으로 변환 후 정규화를 수행
- 표준형에 대한 집합 = 카노니컬 커버
- 표준형 조건
- F의 모든 함수적 종속성의 종속자의 속성은 반드시 1개
- 표준형 O: A → B, C → D
- 표준형 X: A → BC
- F에서 X→A를 X의 진부분집합 Y에 대하여 Y→A로 교체했을 때, 그 집합이 F와 동등한 집합이 불가능
- 가장 최소화 되어있는 지를 확인하는 조건
- 표준형 O: AB → C 라는 함수적 종속성이 있을 때, A → C나 B → C가 F로부터 유도되지 않는 경우
- 표준형 X: ABC → D 라는 함수적 종속성이 있는데, 사실 AB → D만으로도 F로부터 유도될 수 있는 경우
- F에서 어떤 함수적 종속성을 제거했을 때, 그 집합이 F와 동등한 집합이 불가능
- 표준형 X: A → B, B → C, A → C 라는 함수적 종속성 집합이 있을 때, A → C를 제거해도 나머지 {A → B, B → C}로부터 A → C를 유도할 수 있으므로 A → C는 불필요한 함수적 종속성
- 의미 상 동등하다면 아직 표준형이 아님
- 위 집합은 표준형에 해당하므로, 반드시 필요함
- 어떤 종속성을 변경하거나 제외했을 때, 기존 종속성의 집합과 달라졌다는 의미 → 반드시 필요한, 포함시켜야 하는 종속성 집합
- F의 모든 함수적 종속성의 종속자의 속성은 반드시 1개
정규화 (Normalization)
정규화 개념
- 이상 현상을 최소화하도록 특정 조건을 갖춘 릴레이션의 형식
정규형의 분류
- 관계형 데이터베이스 설계 시, 데이터 중복을 최소화하고 정보의 일관성을 보장하며 갱신 이상 문제를 해결하기 위해 릴레이션을 분해하는 과정
- 함수적 종속성 이론을 기반으로 하며, 릴레이션이 만족해야 하는 제약 조건(정규형)에 따라 단계적으로 진행 됨
- 정규화된 릴레이션은 일반적으로 더 구조화되고 유연하며 유지 보수가 용이함
정규화의 목적
- 정규화의 정의
- 특정 정규형의 조건을 만족하도록 릴레이션과 속성을 재구성하는 과정
- 정규화의 기능
- 데이터베이스 내에 모든 릴레이션을 효율적으로 표현
- 바람직하지 않은 삽입, 수정, 삭제 등의 이상 발생 방지
- 보다 간단한 관계 연산에 기초하여 검색 알고리즘을 효과적으로 작성할 수 있도록 지원
- 새로운 형태의 데이터가 삽입 될 때, 릴레이션 재구성의 필요성을 축소
제1 정규형(1NF)의 정의
- 가장 조건이 단순한 정규형
- 형식적 정의
- 릴레이션 스키마에서 정의 된 모든 속성의 도메인이 원자 값을 갖는 상태
- 각 속성 값은 더 이상 분해할 수 없는 단일 값이어야 함
- 릴레이션 스키마에서 정의 된 모든 속성의 도메인이 원자 값을 갖는 상태
- 관계형 모델의 특성을 만족하는 경우, 자동 적용되는 정규형
- 테이블의 각 칸에는 단 하나의 값만 있어야 하며, 반복되는 그룹이나 다중 값 속성이 없어야 함
- ex) 한 컬럼에 여러 개의 전화번호가 쉼표로 구분되어 있거나, 주문 항목이 하나의 컬럼에 리스트 형태로 들어있는 경우 1NF 위반
제1 정규형을 위배한 릴레이션
도크 릴레이션
도크번호 입항시간 출항시간 목적 도크관리자 담당도선사 D1 09:00, 11:00 10:15, 11:45 선적 김규식 김순애 D1 11:50 12:45 하역 김규식 김구 D2 09:00, 12:00 10:00, 12:45 관광, 주유 한용운 이동휘 D2 13:00 15:00 정비 한용운 윤봉길 원자 값을 갖지 않는 속성
입항시간 출항시간 목적 09:00, 11:00 10:15, 11:45 09:00, 12:00 10:00, 12:45 관광, 주유
예제 릴레이션에 대한 부연 설명
- 선박이 항구에 정박하기 위해 정밀한 작업이 요구
- 풍향과 풍속, 파도와 안개 상황 등을 고려
- 단순히 수신호뿐만 아니라 소형 배들로 정박하려는 대형 배를 밀어 안전하게 위치 시키는 작업을 고려
- 도선사
- 배를 도크에 안전하게 접안 시키고 항로로 인도하는 일을 하는 사람
- 도크
- 선박의 건조, 수리, 계선, 하역 작업 등을 위해 축조된 설비 및 시설의 총칭
제1 정규형을 수행한 릴레이션
도크 릴레이션
도크번호 입항시간 출항시간 목적 도크관리자 담당도선사 D1 09:00 10:15 선적 김규식 김순애 D1 11:00 11:45 선적 김규식 김순애 D1 11:50 12:45 하역 김규식 김구 D2 09:00 10:00 관광 한용운 이동휘 D2 12:00 12:45 주유 한용운 이동휘 D2 13:00 15:00 정비 한용운 윤봉길 - 원자적 상태의 속성값으로만 구성 (제1정규형)
함수적 종속성 판별
- 함수적 종속성의 형식적 정의
- 임의의 릴레이션 스키마 R의 인스턴스 r(R)에 포함되는 서로 다른 두 레코드 r1, r2가 컬럼 X와 Y에 대해, r1[X] = r2[X]일 때, r1[Y] =r2[Y]이면 함수적 종속성 X → Y가 성립함
도크번호 입항시간 출항시간 목적 도크관리자 담당도선사 D1 09:00 10:15 선적 김규식 김순애 D1 11:00 11:45 선적 김규식 김순애 D1 11:50 12:45 하역 김규식 김구 D2 09:00 10:00 관광 한용운 이동휘 D2 12:00 12:45 주유 한용운 이동휘 D2 13:00 15:00 정비 한용운 윤봉길 - 도크번호 → 도크관리자
- 도크 번호가 같으면 도크관리자가 같음
- 목적 → 도크번호
- 목적이 같으면 도크번호가 같음
- 목적 → 담당도선사
- 목적이 같으면 담당도선자가 같음
함수적 종속성 다이어그램
- FDD(Functional Dependency Diagram)
릴레이션 내의 속성 간 종속 관계를 직관적이고 이해하기 쉽게 도식화한 표현 방식
- 직사각형
- 속성 또는 속성 집합
- 화살표
- 함수적 종속성
- 직사각형
도크 릴레이션의 함수적 종속성 다이어그램
제2 정규형(2NF)의 정의
- 릴레이션이 제1정규형(1NF)을 만족하고 부분 집합이 특정 속성을 종속하고 있지 않은 상태
- 부분 함수 종속이 존재하지 않아야 함
- 부분 함수 종속은 기본 키가 복합 키로 구성된 경우에 발생할 수 있음
- 키의 일부 속성에만 종속되는 속성이 있을 때 나타남
- 부분 함수 종속이 있다면, 해당 종속 관계를 별도의 테이블로 분해함
- 기본 키가 아닌 모든 속성은 기본 키 전체에 완전 함수 종속되어야 함
- 부분 함수 종속이 존재하지 않아야 함
- 형식적 정의
- 주어진 릴레이션의 인스턴스가 기본 키가 아닌 속성(비주속성)이 기본 키(주속성)에 완전히 종속되어 있는 상태
- X → Y에 대한 함수 종속 관계
- 부분 함수 종속
- Y가 X의 전체가 아닌 일부분에 종속
- 완전 함수 종속
- Y가 X의 전체에 종속
- 부분 함수 종속
제2 정규형의 적용
도크 번호 → 도크 관리자 부분 함수 종속
- 제1 정규형 만족
- 제2 정규형 만족 X
릴레이션의 무손실 분해
- 무손실 분해(lossless decomposition)
- 정의
- 스키마 R에 함수적 종속성 X → Y가 존재하고 X ⋂ Y = ∅이면, R을 R-Y와 XY로 분해
- 정의
- 도크 관리 릴레이션 무손실 분해
- {도크번호} → {도크관리자}
- {도크번호} ⋂ {도크관리자} = ∅
- 도크관리 - {도크관리자}, {도크번호, 도크관리자}
제2 정규화의 적용
도크관리 릴레이션
도크번호 입항시간</u> 출항시간 목적 담당도선사 D1 09:00 10:15 선적 김순애 D1 11:00 11:45 선적 김순애 D1 11:50 12:45 하역 김구 D2 09:00 10:00 관광 이동휘 D2 12:00 12:45 주유 이동휘 D2 13:00 15:00 정비 윤봉길 관리자 릴레이션
도크번호 도크관리자 D1 김규식 D2 한용운
제2 정규형의 FDD
- 도크 릴레이션에서 도크관리자 제거
- 도크번호, 도크관리자만 존재하는 또 다른 릴레이션 생성
- 부분 함수 종속 사라짐
제3 정규형 (3NF)의 정의
- 형식적 정의
- 릴레이션이 제2 정규형(2NF)을 만족하고 기본 키가 아닌 속성들이 어떤 키에도 이행적으로 종속되지 않은 상태
- 이행적 함수 종속은 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성을 결정하는 경우에 발생
- A → B, B → C 일 때 A → C 관계
- 이행적 함수 종속이 있다면, B → C 관계를 별도의 테이블로 분해함
- 이행적 함수 종속은 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성을 결정하는 경우에 발생
- 릴레이션이 제2 정규형(2NF)을 만족하고 기본 키가 아닌 속성들이 어떤 키에도 이행적으로 종속되지 않은 상태
- 이행적 종속성
- X → Y이고 Y → Z이면 X → Z이다.
제3 정규형의 적용
이행적 종속성을 포함한 릴레이션
도크관리 릴레이션
도크번호 입항시간 출항시간 목적 담당도선사 D1 09:00 10:15 선적 김순애 D1 11:00 11:45 선적 김순애 D1 11:50 12:45 하역 김구 D2 09:00 10:00 관광 이동휘 D2 12:00 12:45 주유 이동휘 D2 13:00 15:00 정비 윤봉길
제3 정규화의 적용
도크관리 릴레이션
도크번호 입항시간 출항시간 목적 담당도선사 D1 09:00 10:15 선적 김순애 D1 11:00 11:45 선적 김순애 D1 11:50 12:45 하역 김구 D2 09:00 10:00 관광 이동휘 D2 12:00 12:45 주유 이동휘 D2 13:00 15:00 정비 윤봉길 입출항관리 릴레이션
도크번호 입항시간 출항시간 목적 D1 09:00 10:15 선적 D1 11:00 11:45 선적 D1 11:50 12:45 하역 D2 09:00 10:00 관광 D2 12:00 12:45 주유 D2 13:00 15:00 정비 도선 릴레이션
목적 담당도선사 선적 김순애 하역 김구 관광 이동휘 주유 이동휘 정비 윤봉길
BC 정규형(BCNF)의 정의
- 형식적 정의
- 릴레이션이 제3 정규형을 만족하고 릴레이션에 성립하는 X → Y 형태의 모든 함수적 종속성에 대하여 X가 수퍼키인 상태
- 릴레이션의 모든 결정자가 후보 키여야 함
- 결정자이면서 후보 키가 아닌 속성이 있다면, 해당 함수 종속 관계를 기준으로 테이블을 분해함
- 릴레이션이 제3 정규형을 만족하고 릴레이션에 성립하는 X → Y 형태의 모든 함수적 종속성에 대하여 X가 수퍼키인 상태
- 입출항 관리 릴레이션의 함수적 종속성
- {도크번호, 입항시간} → {목적}
- {도크번호, 입항시간} → {출항시간}
- {목적} → {도크번호}
BC 정규화의 적용
입출항관리 릴레이션
도크번호 입항시간 출항시간 목적 D1 09:00 10:15 선적 D1 11:00 11:45 선적 D1 11:50 12:45 하역 D2 09:00 10:00 관광 D2 12:00 12:45 주유 D2 13:00 15:00 정비 도크스케줄 릴레이션
목적 입항시간 출항시간 선적 09:00 10:15 선적 11:00 11:45 하역 11:50 12:45 관광 09:00 10:00 주유 12:00 12:45 정비 13:00 15:00 도크 릴레이션
목적 도크번호 선적 D1 하역 D1 관광 D2 주유 D2 정비 D2 결정자가 key인지 확인
정규화 결과
도크 릴레이션
도크번호 입항시간 출항시간 목적 도크관리자 담당도선사 D1 09:00 10:15 선적 김규식 김순애 D1 11:00 11:45 선적 김규식 김순애 D1 11:50 12:45 하역 김규식 김구 D2 09:00 10:00 관광 한용운 이동휘 D2 12:00 12:45 주유 한용운 이동휘 D2 13:00 15:00 정비 한용운 윤봉길 도크스케줄 릴레이션
목적 입항시간 출항시간 선적 09:00 10:15 선적 11:00 11:45 하역 11:50 12:45 관광 09:00 10:00 주유 12:00 12:45 정비 13:00 15:00 도크 릴레이션
목적 도크번호 선적 D1 하역 D1 관광 D2 주유 D2 정비 D2 관리자 릴레이션
도크번호 도크관리자 D1 김규식 D2 한용운 도선 릴레이션
목적 담당도선사 선적 김순애 하역 김구 관광 이동휘 주유 이동휘
역정규화의 개념
- 정규화
- 릴레이션 분할을 통해 데이터의 중복성을 최소화하는 과정
- 사용 과정에서 많은 조인 연산을 유발
- 지나친 정규화는 검색의 성능이 저하될 수 도 있음
- 역정규화
- 정규화의 반대 과정
- 정규화를 통해 분리되었던 릴레이션을 통합하는 재조정을 수행하고 정보의 부분적 중복을 허용하는 기법
- 데이터 접근 성능 개선 목적
- 검색의 결과는 빨리 나올 수 있게
- 정규화를 진행하되 검색에 영향을 끼치는 부분은 역정규화를 수행
- 정규화 되지 않은 스키마와 역정규화 스키마는 구별
- 해당 두 가지는 다른 개념
연습 문제
다음 중 정규화에 대한 설명으로 올바르지 않은 것은?
a. 릴레이션 간 공통 부분을 도출하고 유사 릴레이션을 통합함
- 정규화는 컬럼 간의 연관 관계를 이용하여 릴레이션의 비효율성을 제거 함
- 특히 릴레이션 내부에 존재하는 데이터의 중복을 최소화하여 삽입, 갱신, 삭제 이상 현상을 제거하고, 이를 통해 새로운 데이터가 삽입될 때 릴레이션을 재구성해야하는 가능성을 최소화 시킴
- 정규화에 대한 올바른 설명
- 데이터가 삽입될 때 릴레이션 재구성의 필요성을 줄임
- 데이터의 중복을 제거하여 릴레이션의 효율성을 향상 시킴
- 삽입, 갱신, 삭제 이상(anomaly) 현상을 제거함
릴레이션 내의 컬럼 간의 종속 관계를 직관적이고 이해하기 쉽게 직사각형과 화살표로 도식화한 표현 방식을 무엇이라고 하는가?
a. 함수적 종속성 다이어그램
- 컬럼 간의 종속 관계를 컬럼의 이름만으로 나열할 경우 관계가 전체적으로 파악하기가 어렵기 때문에 모양이 간단한 도형을 사용할 경우 종속 관계를 파악하기 쉬워짐
- 종속 관계를 직사각형과 화살표로 표현한 그림을 함수적 종속성 다이어그램이라고 함
다음 중 사업자 릴레이션에 포함된 함수적 종속성이라고 할 수 없는 것은?
사업자 릴레이션
사업자번호 공사구분 건축물 층수 사업자 11 B1 빌라 3층 김영수 11 C1 단독 2층 김영수 11 D1 다세대 4층 김영수 24 A1 아파트 15층 이민철 24 B2 빌라 3층 이민철 31 D2 다세대 4층 최용수
a. 사업자번호 → 공사구분
- 사업자번호 → 공사구분 종속성에 대해 첫 번째와 두 번째 레코드를 살펴볼 때, 사업자번호의 컬럼값은 ‘11’과 ‘11’로 같지만 공사구분의 컬럼값은 ‘B1’, ‘C1’으로 같지 않음
- 따라서 함수적 종속성 정의에 위배되므로 사업자번호 → 공사구분 종속성은 성립하지 않음
- 사업자 릴레이션에 포함 된 함수적 종속성
- 건축물 → 층수
- 사업자번호, 공사구분 → 건축물
- 사업자 → 사업자번호
정리 하기
- 데이터베이스 모델링 과정에서 효율성을 위해 어떤 속성들을 그룹화하여 테이블로 작성할 것인지 고려할 필요가 있으며 전체적인 테이블 구조는 데이터베이스의 정확성을 판단하는 데 중요한 기준이 됨
- 정규화는 데이터의 중복을 제거하고, 새로운 속성들이 데이터베이스에 추가될 때 기존 속성과의 관계에서 수정을 최소화해야 한다는 것이 목적임
- 정규화 과정을 통해 데이터 저장을 위한 공간의 낭비를 최소화 할 수 있음
- 정규화 이전에 데이터베이스 조작에서 발생하는 삽입, 삭제, 수정 등의 갱신 이상 현상을 정규화를 통해 방지할 수 있음
- 속성들 간의 연관 관계를 표현한 함수적 종속성은 릴레이션의 효율성 여부에 중요한 판단 기준이 되지만, 릴레이션의 인스턴스만으로 잠재 된 모든 함수적 종속성을 찾아내기 어렵기 때문에 이를 확장하기 위해 암스트롱 공리를 적용하여 클로저로 확장함
- 도출된 클로저에는 자명한 함수적 종속성이나 중복된 함수적 종속성을 포함하고 있으므로 이러한 불필요한 종속성을 제거한 카노니컬 커버를 사용하여 정규화를 진행함
- 함수적 종속성은 릴레이션 스키마의 속성들 사이에 명시되는 기본적인 제약 조건임
- 함수적 종속성에 의한 방법과 추론하는 방법을 바탕으로 기본적인 정규형을 구성할 수 있음
- 정규형의 만족 시켜야 하는 제약 조건에 따라 제1 정규형, 제2 정규형, 제3 정규형, BC 정규형, 제4 정규형, 제5 정규형 순서로 진행됨
- 정규형의 조건은 정규화가 진행될수록 강화 됨
체크 포인트
제 3정규형(3NF)에서 BCNF(Boyce-Codd Normal Form)가 되기 위한 조건은?
a. 결정자가 후보키가 아닌 함수 종속 제거
- 이행적 함수 종속 제거 - 제3 정규형 만족
- 원자 값이 아닌 도메인 분해 - 제1 정규형 만족
- 결정자가 후보키가 아닌 함수 종속 제거 - BC 정규형 만족
- 부분 함수 종속 제거 - 제2 정규형 만족
다음에서 설명하는 모든 조건을 만족하는 릴레이션 R의 정규형은?
- 릴레이션 R의 함수 종속 관계에서 기본 키가 아닌 모든 속성들이 기본키에 이행적 함수 종속이 아니다.
- 제3 정규형 조건 만족
- 릴레이션 R에 속한 모든 속성의 도메인이 원잣 값만으로 되어 있으며, 기본 키가 아닌 모든 속성이 기본 키에 완전 함수 종속이다.
- 제1 정규형 , 제2 정규형 만족
- 릴레이션 R의 함수 종속 관계에서 결정자(determinant) 중에 후보 키가 아닌 것이 포함되어 있을 수 있다.
- BC 정규형 만족시키지 않음
a. 제3 정규형
- 릴레이션 R의 함수 종속 관계에서 기본 키가 아닌 모든 속성들이 기본키에 이행적 함수 종속이 아니다.