CS 스터디 벌써 다섯 번째 주제(?이다. 데이터베이스에 대해 공부하였다.
내가 맡은 부분은 ACID, 정규화, RDBMS와 NoSQL과 관련된 내용이었다. 이 또한 자격증 공부들 덕분에 다시 보면서 조금 더 이해 할 수 있었다. (물론 자격증 공부할 때는 매우 힘들었지만 ...)
데이터 베이스 정규화
정규화란?
정규화는 데이터의 중복을 최소화하고 이를 통해 무결성을 유지하도록 하는 것이다. 또한, 정규화를 통해 DB 용량 또한 줄일 수 있다.
정규화의 목적
- 데이터 중복 최소화
- 데이터 무결성 유지 - 오류, 안전성 보장
- 업데이트 이상 현상 최소화 - 삽입, 삭제, 갱신 시 발생할 수 있는 이상현상을 방지한다.
- 정보 검색 용이
- 확장성과 유연성 향상 - DB가 확장되거나 변경될 때 수정하기 쉽고 새로운 데이터나 관계를 추가하는데도 유연하다.
✨ 이상 현상(Anomaly)이란?
데이터 이상 현상으로 인한 조작 시 발생하는 오류를 말한다.
속성들 간에 존재하는 여러 종류의 종속 관계를 하나의 릴레이션에 표현할 때 발생한다.
- 삽입 이상 : 불필요한 데이터가 함께 삽입
- 삭제 이상 : 하나의 튜플을 삭제할 때 다른 튜플도 연쇄적으로 삭제 되어 정보 손실
- 갱신 이상 : 데이터 정보가 모두 갱신되는 것이 아니라 일부만 갱신되어 모순 발생
정규화의 장단점
✅ 장점
- 데이터 중복의 최소화
- 무결성 유지
- 저장 공간의 효율적 활용
- 이상현상 최소화
✅ 단점
- 쿼리문이 복잡
- 실행 속도 느림
- 개발 및 유지의 복잡성 (설계 복잡)
- 조인의 증가 → 성능 저하
함수적 종속(Functional Dependency)
개념
어떤 릴레이션의 X와 Y가 각각 속성의 부분집합이라고 가정했을 때 X의 값을 알면 Y를 알 수 있고 X에 따라 Y의 값도 달라질 때 Y는 X의 함수적 종속이라고 한다.
기호로는 `X → Y` 로 표현한다.
종류
✔️ 완전 함수적 종속(Full Functional Dependency)
종속자(종속되는 속성)가 기본키에만 종속되는 경우를 의미한다. 기본키가 복합키(두 개 이상의 속성)로 구성되어 있을 경우 복합키를 구성하는 모든 속성에 대해 종속자는 종속되어야 만족할 수 있다.
➡️ 기본키는 회원 ID
➡️ 이름, 나이, 지역은 기본키인 회원ID에 완전함수적 종속
➡️ 복합키(기본키)는 회원 ID, 주문 회원 번호
➡️ 상품명, 가격은 복합키인 (회원ID 와 주문번호)에 완전함수적 종속
✔️ 부분 함수적 종속(Partial Functional Dependency)
기본키가 여러 속성으로 구성되어 있을 때(복합키일 때), 기본키를 구성하는 속성 중 일부만 종속되어 있는 경우를 의미한다.
➡️ 상품명, 가격은 복합키인 (회원ID 와 주문번호)에 종속적이지만 이름은 “회원ID에만” 종속된다. 이렇게 부분적으로 종속되는 것을 부분 함수적 종속이라고 한다.
✔️ 이행적 함수 종속(Transitive Functional Dependency)
X → Y, Y → Z 이런 종속 관계가 있을 경우, X → Z 가 성립될 때 이행 함수 종속이라고 한다.
➡️ 회원ID를 알면 전화번호를 알 수 있고 전화번호를 알면 회원 이름을 알 수 있다. 이 때 이행적 함수 종속이 발생한다.
정규화 과정
제 1 정규형(1NF)
✔️ 만족 조건
어떤 릴레이션에 속한 모든 도메인이 원자값만으로 되어 있다.
✔️ 조건 만족 처리
학번과 이름을 하나의 릴레이션으로 분리하고 수강과목을 다른 릴레이션으로 만들어 속성이 원자값만으로 구성되게 한다.
[비정규 릴레이션]
[1NF 만족 릴레이션]
제 2 정규형(2NF)
✔️ 만족 조건
부분 함수적 종속을 모두 제거하여 완전 함수적 종속으로 만든다.
✔️ 조건 만족 처리
학번과 과목ID가 복합키(기본키)라고 할 때, 과목에만 종속되는 과목과 학번에만 종속되는 이름을 제거하여 완전 함수적 종속으로 만든다.
[비정규 릴레이션]
[2NF 만족 릴레이션]
제 3 정규형(3NF)
✔️ 만족 조건
이행적 함수 종속을 없앤다.
✔️ 조건 만족 처리
학번을 알면 학생의 주민번호를 알 수 있고 학생의 주민번호를 알면 이름을 알 수 있다. 학번과 주민번호를 하나의 릴레이션으로 구성한다.
[비정규 릴레이션]
[3NF 만족 릴레이션]
★ 보통 3정규화과정 까지만 진행한다.
BCNF(Boyce-codd Normal Form)
3정규화를 조금 더 강화한 버전으로 결정자 중 후보키가 아닌 것을 제거한다.
✨ 후보키란?
테이블에서 각 행(튜플)을 유일하게 식별할 수 있는 최소한의 속성들의 집합이다.
기본키가 될 수 있는 키를 후보키라고 한다. 유일성과 최소성 둘 다 만족
ex) 학생 ID, 이름, 핸드폰번호, 이메일 주소가 있을 때 학생을 구별할 수 있는 것은 모두 후보키가 된다. 이름을 제외하고 모두 후보키가 될 수 있다.
제 4 정규형(4NF)
다치 종속(한 속성이 두 속성에 대해 독립적으로 종속될 때) 제거를 위해 진행한다.
[비정규 릴레이션]
[4NF 만족 릴레이션]
제 5 정규형(5NF)
조인 종속성을 제거한다. 테이블을 분해했다가 다시 조인했을 때 원래의 테이블과 동일한 정보를 유지해야한다.
[비정규 릴레이션]
[5NF 만족 릴레이션]
📖 참고자료
'LANGUAGE > MySQL' 카테고리의 다른 글
[MySQL] Window11 MySQL 설치하기 / Developer default 안 보일 때 해결 방법 (0) | 2023.07.23 |
---|---|
[MySQL] 필드 기본값(Default) 설정하기 (1) | 2023.06.04 |
[MySQL] MySQL 자주 사용하는 쿼리문 / 쿼리문 실행 순서 정리 (0) | 2023.05.26 |
[SQL] 트랜잭션(Transaction)이란? ACID원칙 (1) | 2023.05.26 |
[SQL] 데이터베이스 언어: DDL, DML, DCL, TCL의 이해와 활용 (0) | 2023.05.25 |