database

[database] 정규화 개념 및 종류별 테이블 비교

hail2y 2024. 4. 28. 16:05

이 글은 수제비2024 정보처리기사 실기 책의 이론을 정리하되, 예시 테이블은 다시 재구성하였습니다.

이상 현상(Anomaly)

데이터의 중복성으로 인해 릴레이션(테이블)을 조작할 때 발생하는 비합리적인 현상

  • 삽입 이상: 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우

[삽입 이상]

이름 전화번호 차량번호
홍길동 010-1111-1111 가123
김철수 010-2222-2222 NULL

인적사항을 등록할 때 본인 소유의 차량번호를 기재해야 한다면 자가용이 없는 김철수는 해당란에 NULL을 입력해야 한다.  

  • 삭제 이상: 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우

[삭제 이상]

이름  학과  기숙사 번호 기숙사 이름
홍길동 영어영문학과  1 한얼관
김철수  컴퓨터공학과 2 한빛관
    김철수의 정보를 삭제하려할 때 기숙사 정보 또한 함께 삭제된다. 
  • 갱신 이상: 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우
이름  학과 강의명 수강료
홍길동 전기전자공학과 데이터베이스 20,000
김철수  컴퓨터공학과 자료구조 15,000

 

만약 강의 종류가 각각 하나씩 존재하고 홍길동이 자료구조로 강의를 변경하고자 할 때 강의명만 자료구조로 바꾼다면, 같은 강의에 대하여 20,000원과 15,000원 각기 다른 값으로 존재해 모순이 발생한다.

 

함수 종속 (Functional Dependency)

- 릴레이션에서 속성의 의미와 속성 간 상호 관계로부터 발생하는 제약 조건

- 간단히 말하자면 속성들 간 의존 관계 

- X → Y; X인 결정자에 따라 Y인 종속자가 결정된다

종류 설명
부분 함수 종속(Partial Functional Dependency) 릴레이션에서 기본키가 복합키일 경우 기본 키를 구성하는 속성 중 일부에게 종속된 경우
완전 함수 종속(Full Functional Dependency) 릴레이션에서 X→Y 관계가 있을 때, Y는 X의 전체 속성에 대해 종속하고 부분 집합 속성에 종속하지 않는 경우
이행 함수 종속(Transitive Functional Dependency) 릴레이션에서 X→Y, Y→Z 종속관계가 있을 때, X→Z가 성립되는 경우

 

예시는 아래의 정규화 단계 속에서 확인해 볼 수 있다. 

 

정규화(Normalization)

- 관계형 데이터 모델에서 데이터 중복성을 제거하여 이상현상을 방지하고 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정

단계 조건
1정규형(1NF) 메인이 원자값으로 구성
2정규형(2NF) 분 함수 종속 제거(= 완전 함수 종속)
3정규형(3NF) 행 함수 종속 제거
보이스-코드 정규형(BCNF) 정자 후보키가 아닌 함수 종속 제거 
5정규형(5NF) 치(다중 값) 종속 제거
6정규형(6NF) 인 종속 제거

 

1정규형(1NF)

 - 속성 값이 원자값(더 이상 나눌 수 없는 값)으로 구성

 

[적용 전]

학번 이름 학과
1 홍길동 경영학과, 경제학과

 

[적용 후]

학번 이름 학과
1 홍길동 경영학과
1 홍길동 경제학과

 

  • 원자값을 사용하면 각 필드의 값이 하나의 의미 있는 데이터 요소를 나타내기 떄문에 데이터 무결성을 유지할 수 있다.
  • 중복 데이터를 최소화하여 저장 공간 낭비를 줄일 수 있고 데이터를 업데이트할 때 불일치 가능성을 줄일 수 있다. 
  • 데이터베이스 질의를 수행할 때 원자값을 사용하면 조건을 더 쉽게 설정할 수 있고 데이터를 더 정확하게 필터링할 수 있다.
  • 데이터 구조를 명확하게 하고, 데이터베이스 설계를 이해하기 쉽게 한다. → 유지보수와 확장성 높임
  •  엔터티와 관계를 더 명확하게 정의할 수 있다. 

 

2정규형(2NF)

- 1NF를 만족해야 한다

- 부분 함수 종속 제거 (기본키가 복합키인 경우 그 일부에 의한 함수 종속이 일어나지 않게 하는 것)

 

[적용 전]

품번 물품 카테고리 제조사
A1 가위 학용품 A사
A2 가위 학용품 B사
A3 비누 욕실용품 C사

 

[적용 후]

품번 물품 제조사
A1 가위 A사
A2 가위 B사
A3 비누 C사
물품 카테고리
가위 학용품
비누 욕실용품

 

적용 전의 테이블을 보면 <품번, 물품>이라는 복합키로 기본키를 이룬 것을 알 수 있다. 이 조합의 기본키로 제조사 열의 값이 결정되었다. 그런데 카테고리 열을 보면 품번 없이도 물품만 보고 충분히 속성 값을 채울 수 있다. 이것이 복합키 중 일부만 보고 다른 열의 값이 결정된 부분 함수 종속의 예시이다. 그렇기 때문에 이 종속성을 제거하기 위해 위와 같은 테이블 2개로 분해해 볼 수 있다. 따라서 분해한 결과의 모습이 2차 정규화를 만족한다고 말할 수 있다.  

 

3정규형(3NF)

- 2NF를 만족해야 한다

- 이행 함수 종속 제거 (속성에 종속적인 속성을 분리하는 것)

 

[적용 전]

학번 이름 거주 중인 생활관 생활관 전화번호
1 홍길동 한얼관 02-1111-1111
2 김철수 한빛관 02-2222-2222

 

[적용 후]

학번 이름 거주 중인 생활관
1 홍길동 한얼관
2 김철수 한빛관
거주 중인 생활관  생활관 전화번호
한얼관 02-1111-1111
한빛관 02-2222-2222

 

적용 전의 테이블을 보면 <학번>에 따라 <거주 중인 생활관>이 결정되고, 또 <거주 중인 생활관>에 따라 <생활관 전화번호>가 결정되는 것을 알 수 있다. 즉, 한 테이블 안에서 X→Y, Y→Z 관계가 나타나며 X→Z 구조를 이루고 있다. 이는 이행 함수 종속에 속하며 3차 정규화를 하게 되면 아래의 테이블 2개로 분해할 수 있다. 

 

보이스-코드 정규형(BCNF)

- 3NF를 만족해야 한다

- 결정자 함수 종속 제거, 모든 결정자가 후보 키(결정자 후보키가 아닌 속성이 다른 속성을 종속하는 것을 제거하는 것)

 

[적용 전]

학번 과목명 교수명
1 데이터베이스  이민형
2 데이터베이스  이민형
2 컴퓨터구조 김동영

 

[적용 후]

학번 과목명
1 데이터베이스
2 컴퓨터구조
교수명  과목명
이민형 데이터베이스
김동영 컴퓨터구조

 

적용 이전의 테이블에서 복합키이면서 기본키인 <학번, 과목명>은 결정자로서 학생이 선택한 과목의 교수를 결정한다. 그런데 살펴보면 <교수명>도 <과목명>의 정보를 결정한다고 볼 수 있다. 관점에 따라 <과목명>이 <교수명>을 결정한다고 볼 수도 있고... 그러면 부분 함수 종속이라고 보겠죠? 여기서는 앞서 말한 <교수명> 열이 <과목명>의 값을 결정할 수 있다고 보겠다. 그 말은 <교수명>이 결정자의 역할을 한다는 것인데 키 정보를 보면 키에 속하지 않는 것을 볼 수 있다. 따라서 후보키가 아닌 결정자가 다른 속성의 값을 결정했기 때문에 BCNF를 만족하지 않는다고 보아 아래 테이블처럼 분해할 수 있겠다. 적용 후의 테이블에서는 <교수명>이 결정자 역할을 하므로 BCNF를 만족한다.

 

4정규화(4NF)

- BCNF를 만족해야 한다

- 다치(다중 값) 종속 제거 , 특정 속성값에 따라 선택적인 속성을 분리하는 정규화 과정

 

[적용 전]

학생 수강 등록 과목 수강 취소 과목
홍길동 데이터베이스 자료구조
홍길동 컴퓨터 네트워크 모바일앱프로그래밍
김철수 데이터 통신 컴퓨터 비전

 

[적용 후]

학생 수강 등록 과목
홍길동  데이터베이스
홍길동 컴퓨터 네트워크
김철수 데이터 통신
학생  수강 취소 과목
홍길동 자료구조
홍길동 모바일앱프로그래밍
김철수 컴퓨터 비전

 

<학생>마다 <수강 등록 과목> 값들이 여러 개 존재하고, 또 특정 <학생>마다 <수강 취소 과목> 값들이 여러 개 존재하는 경우 다치 종속 관계라고 한다. 그와 같은 이유로 <학생, 수강 등록 과목>, <학생, 수강 취소 과목 > 테이블로 분리하여 관리하면 다치 종속 관계를 제거할 수 있다. 

 

5정규형(5NF)

- 조인 종속 제거 (조인 연산 수행 시 수행 전 데이터와 다르게 되는 문제가 발생하지 않도록 하는 것)

 

(4차 정규화에서 조인 연산 하면)

학생 수강 등록 과목
홍길동  데이터베이스
홍길동 컴퓨터 네트워크
김철수 데이터 통신

학생  수강 취소 과목
홍길동 자료구조
홍길동 모바일앱프로그래밍
김철수 컴퓨터 비전  

 

⇒  잘못된 결과물

학생 수강 등록 과목 수강 취소 과목
홍길동  데이터베이스 자료구조
홍길동 컴퓨터 네트워크 자료구조
홍길동 데이터베이스 모바일앱프로그래밍
홍길동  컴퓨터 네트워크 모바일앱프로그래밍
김철수 데이터 통신 컴퓨터 비전

 

(5차 정규화 적용)

학생 수강 등록 과목 수강 취소 과목
홍길동 데이터베이스 자료구조
홍길동 컴퓨터 네트워크 모바일앱프로그래밍
김철수 데이터 통신 컴퓨터 비전

⇒ 

학생 수강 등록 과목
홍길동 데이터베이스
홍길동 컴퓨터 네트워크
김철수  데이터 통신
수강 등록 과목 수강 취소 과목
데이터베이스  자료구조
컴퓨터 네트워크 모바일앱프로그래밍
데이터 통신 컴퓨터 비전
학생  수강 취소 과목
홍길동 자료구조
홍길동  모바일앱프로그래밍
김철수 데이터 통신

 

모든 속성 관계인 <학생, 수강 등록 과목>, <수강 등록 과목, 수강 취소 과목>, <학생, 수강 취소 과목> 에 대해 테이블을 만들어 줌으로써 조인했을 때 원래의 테이블로 복원될 수 있게 한다. 

 

https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com

https://velog.io/@wisdom-one/%EC%A0%95%EA%B7%9C%ED%99%94Normalization

 

정규화 (1NF, 2NF, 3NF, BCNF, 4NF, 5NF)

1. 정의 Normalization 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말한다. > #### 💡 이

velog.io

조인 종류(동등조인, 세타조인, 자연조인, 세미조인, 외부조인)

https://m.blog.naver.com/aservmz/221960633361

 

[Database] 관계대수

#20200513 #Database #관계대수 관계 데이터 모델을 제시한 Codd박사는 관계 데이터 모델을 사용할 때 필...

blog.naver.com