이 글은 수제비2024 정보처리기사 실기 책의 이론을 정리하되, 예시 테이블은 다시 재구성하였습니다.
이상 현상(Anomaly)
- 데이터의 중복성으로 인해 릴레이션(테이블)을 조작할 때 발생하는 비합리적인 현상
- 삽입 이상: 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우
[삽입 이상]
이름 | 전화번호 | 차량번호 |
홍길동 | 010-1111-1111 | 가123 |
김철수 | 010-2222-2222 | NULL |
인적사항을 등록할 때 본인 소유의 차량번호를 기재해야 한다면 자가용이 없는 김철수는 해당란에 NULL을 입력해야 한다.
- 삭제 이상: 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
[삭제 이상]
이름 | 학과 | 기숙사 번호 | 기숙사 이름 |
홍길동 | 영어영문학과 | 1 | 한얼관 |
- 김철수의 정보를 삭제하려할 때 기숙사 정보 또한 함께 삭제된다.
- 갱신 이상: 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우
이름 | 학과 | 강의명 | 수강료 |
홍길동 | 전기전자공학과 | 데이터베이스 | 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
'database' 카테고리의 다른 글
[SQL 튜닝] 3. 인덱스 튜닝 (0) | 2025.05.02 |
---|---|
[SQL 튜닝] 2. 인덱스 기본 (0) | 2025.04.28 |
[database] 엔티티, 릴레이션, 튜플, 카디널리티 (0) | 2025.02.04 |
[database] delete, truncate, drop 차이점 비교 (0) | 2024.04.28 |