[코드잇 풀스택 1기] - 데이터베이스 정규화 이해해보기!

2024. 9. 10. 14:29취업 준비 !

데이터베이스(Data Base) 정규화 ?

정규화(Normalization)

정규화는 관계형 데이터베이스으이 설계에서 데이터 중복을 줄이고, 데이터 무결성성을 개선하기 위해 데이터 정규형에 맞도록 구조화하는 프로세스를 뜻합니다.

데이터베이스 정규화의 목표는 이상이 있는 관계를 잘 정리하여 생성하는 것에 있습니다.

 

 

제 1 정규화 ( 1NF 또는 최소형)은 데이터베이스 정규화에서 사용하는 정규형중 하나입니다.

관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계이며, 중복되는 항목이 없어야 한다.

 

고객 취미

이름 취미
김00 배드민턴, 영화
이00 인터넷
박00 게임, 쇼핑

 

위 테이블에서 김00, 박00 은 여러 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못하고 있다.

해결하기 위해

이름 취미
김00 배드민턴
김00 영화
이00 인터넷
박00 게임
박00 쇼핑

 

제 1 정규화를 통해 분리 해주었다.

 

 

제2 정규화(2NF)는 데이터베이스 정규화에서 사용하는 정규화중 하나로, 제1 정규형인 테이블이 제 2 정규형을 충족시키는 필요충분조건은 후보 키 K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K전체를 참조해야 만 하는 경우 1NF테이블은 2NF이다.

 

제 1 정규화 예시에서 나이를 추가해보겠습니다.

이름 나이 취미
김00 27 배드민턴
김00 27 영화
이00 23 인터넷
박00 32 게임
박00 32 쇼핑

 

위 테이블을

이름 나이
김00 27
이00 23
박00 32

 

이름 취미
김00 배드민턴
김00 영화
이00 인터넷
박00 게임
박00 쇼핑

 

이런 방식으로 테이블을 분리한다는 의미 입니다.

 

 

제 3 정규형

테이블이 제 2 정규형을 만족하고, 테이블 내의 키가 아닌 모든 컬럼이 테이블의 모든 키에 이행적 종속이 되지 않는다.

 

대회 연도 우승자 생년월일
A대회 2012 김00 1998.01.01
B대회 2016 이00 1999.10.03
C대회 2018 박00 1999.10.01
D대회 2020 김00 1998.01.01
E대회 2024 박00 1999.10.01

위 테이블은 2정규화 입니다. 3정규화로 변형하면

 

대회 우승자 테이블

대회 연도 우승자
A대회 2012 김00
B대회 2016 이00
C대회 2018 박00
D대회 2020 김00
E대회 2024 박00

우승자 정보 테이블

우승자 생년월일
김00 1998.01.01
이00 1999.10.03
박00 1999.10.01

 

위 테이블 처럼

이행적 함수종속은 기능적 종속으로 X -> Y , Y -> Z에 의해서 X- >Z가 되는 것입니다.

 

BCNF 정규화는 3차 정규화를 조금 더 강화 한 버전입니다.

그래서 3.5 정규화라고도 부릅니다.

제3 정규화를 진행한  테이블에 대한 모든 결정자가 후보키가 되도록 테이블을 분해

 

학번 과목이름 교수
101 과목1 김00
101 과목1 김00
102 과목2 이00
103 과목3 박00
101 과목2 박00

 

 

학번 교수
101 김00
102 이00
103 박00
101 박00
과목이름 교수
과목1 김00
과목2 이00
과목3 박00
과목2 박00

 

 

 

제 4 정규화

다치 종속을 제거 

4 정규화를 만족하기 위해 BCNF를 만족해야하고,

다중값 종속(다치 종속)이 없어야 한다.

 

다치 종속 이란 ?

다치 종속은 어떠한 조건을 만족하는 튜플이 릴레이션 안에 있을 것을 요구, 그러므로 다치 종속은 튜플이 만들어내는 "종속" 중 한 종류

다치 종속은 머리가 두개인 이중 화살표 표기한다. AB 일때 A가, B를 다치 결정한다고 말하고, 다른 말로는 B가 A에 다치 종속 된다고 말합니다.

 

 

제 5 정규화

조인 종속을 제거

5 정규화를 만족 하기 위해

4정규화를 만족해야하고, 더 이상 비손실 분해를 할 수 없어야 한다.

 

조인 종속 이란 ?

테이블 속성의 부분집합을 가지는 여러 개의 테이블들이 조인하여 만들어질 수 있을때 조인 조인종속성을 가진다고 한다.

 

 

왜 사용할까 ?

장점 :

1. 데이터 중복 제거

2. 데이터 무결성 유지

3. 데이터베이스 확장성

단점 : 

1. 복잡한 쿼리

2. 데이터 삽입, 수정 성능 저하

3. 초기 설계 복잡성

 

 

추가적으로 관계형 데이터베이스를 사용하는 이유 !

관계형 데이터베이스(RDBMS)를 사용하는 이유는 다양한 데이터 관리 욕사항을 효율적으로 처리하고, 데이터를 체계적이고 안전하게 저장, 수정, 조회하는 데 있어 많은 이점을 제공하기 때문이다. 관계형 데이터베이스는 테이블 형태로 데이터를 구조화하고, 테이블 간의 관계를 정의할 수 있어 데이터 무결성을 유지하며 다양한 복잡한 쿼리를 지원합니다. 

 

1. 데이터의 구조화된 저장

2. 데이터 무결성 유지

3. 복잡한 쿼리 및 데이터 검색

4. 데이터 중복 최소화

5. 데이터 보안

6. 트랜잭션 지원 및 데이터 일관성

7. 관계 표현 및 참조 무결성

8. 동시성 제어

9. 백업 및 복구 기능

10. 확장성

 

이처럼 관계형 데이터베이스는 데이터를 구조화하여 저장하고, 복잡한 관계를 유지하며, 데이터의 무결성과 일관성을 보장할 수 있는 강력한 도구 입니다. 

트랜잭션, 동시성 제어, 참조 무결성, 데이터 보안 등의 기능을 통해 대규모 애플리케이션에서 안정적이고 효율적인 데이터 관리를 가능하게 합니다.

 

관계형 데이터베이스 :

MySQL, PostgreSQL, Oracle DB, Microsoft SQL Server, SQLite, MariaDB 등등 다양하게 많이 있는걸로 알고 있습니다!

 

참고