데이터베이스 향상을 위한 정규화 비정규화에 대해 알아보자
관계형 데이터베이스의 설계에서 중복을 최소화하고, 데이터를 구조화를 위해 데이터베이스를 재구성하는 과정
데이터의 이상 현상 (Anomaly)
- 삭제 이상 (Delete Anomaly)
: 새 데이터 삽입하기 위해 불필요한 데이터도 함께 삽입해야하는 문제- 삽입 이상 (Insert Anomaly)
: 중복 튜플 중 일부만 변경해 데이터가 불일치하게 되어 모순이 발생하는 문제- 갱신 이상 (Update Anomaly)
: 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실 문제
비정규형
하나의 튜플에서 속성으로 입력되는 도메인의 값으로 여러개의 값이 들어와서 원자성을 갖지 못하는 경우
제1정규형 (1NF)
원자성모든 속성은 반드시 하나의 값만 가져야 한다
※ 비정규형 예시
id | username | contacts |
---|---|---|
1 | yjohbjects | 010-1234-5678, @yjohbjects |
2 | eugenieseo16 | 010-2345-6789, @eugenieseo16 |
※ 제1정규형 예시
id | username | mobile | velog |
---|---|---|---|
1 | yjohbjects | 010-1234-5678 | yjohbjects |
2 | eugenieseo16 | 010-2345-6789 | eugenieseo16 |
제2정규형 (2NF)
부분적 함수 종속 제거모든 속성은 반드시 모든 기본키에 종속되어야 한다
부분 종속성이 없어야한다
※ 비정규형 예시
title | channel | category_id | category | likes |
---|---|---|---|---|
백준 39128 알고리즘 문제풀이 | tistory | 5 | 알고리즘 | 63 |
데이터베이스 정규화에 대해 알아보자! | velog | 6 | 데이터베이스 | 26 |
프로그래머스 12352 알고리즘 문제풀이 | velog | 5 | 알고리즘 | 55 |
프로그래머스 12352 알고리즘 문제풀이 | tistory | 5 | 알고리즘 | 25 |
=> 프로그래머스 12352 알고리즘 문제풀이
열
category, category_id는 title에 부분적으로 종속
channel과 likes로 인해 중복되는 데이터 발생 (테이블의 주 목적)
부분적으로 종속되는 컬럼들만 모으고
전체적으로 종속되고있는 컬럼들을 따로 쪼개는 과정을 통해 정규화
※ 제2정규형 예시
Post 테이블
title | category_id | category |
---|---|---|
백준 39128 알고리즘 문제풀이 | 5 | 알고리즘 |
데이터베이스 정규화에 대해 알아보자! | 6 | 데이터베이스 |
프로그래머스 12352 알고리즘 문제풀이 | 5 | 알고리즘 |
Post_channel 테이블
title | channel | likes |
---|---|---|
백준 39128 알고리즘 문제풀이 | tistory | 63 |
데이터베이스 정규화에 대해 알아보자! | velog | 26 |
프로그래머스 12352 알고리즘 문제풀이 | velog | 55 |
프로그래머스 12352 알고리즘 문제풀이 | tistory | 25 |
제3정규형 (3NF)
이행적 함수 종속 제거기본키가 아닌 속성들은 기본키에만 의존해야한다
※ 비정규형 예시
post_id | title | category_id | category | posts |
---|---|---|---|---|
1 | 백준 39128 알고리즘 문제풀이 | 5 | 알고리즘 | 7 |
2 | 데이터베이스 정규화에 대해 알아보자! | 6 | CS 스터디 | 2 |
3 | 프로그래머스 12352 알고리즘 문제풀이 | 5 | 알고리즘 | 7 |
=> post_id 1과 3의 category, posts에서 중복 발생
※ 제3정규형 예시
Post 테이블
post_id와 category_id를 알면 category 필드를 아예 유지하지 않거나, 참조하지 않아도 된다.
post_id | title | category_id |
---|---|---|
1 | 백준 39128 알고리즘 문제풀이 | 5 |
2 | 데이터베이스 정규화에 대해 알아보자! | 6 |
3 | 프로그래머스 12352 알고리즘 문제풀이 | 5 |
Category 테이블
category_id | category | posts |
---|---|---|
1 | 회고 | 23 |
2 | 네트워크 | 12 |
3 | 데이터베이스 | 2 |
4 | JavaScript | 4 |
5 | 알고리즘 | 7 |
6 | CS 스터디 | 5 |
반정규화라고도 한다
정규화된 속성과 관계, 엔티티등의 시스템의 성능 향상 또는 개발 단순화를 위해 통합이나 분리 등의 과정
(개발 및 운영의 편의성을 위해 의도적으로 정규화 원칙을 위배)
디스크의 I/O 메모리 용량이 높아서 성능 저하가 우려되거나
테이블 간의 JOIN의 비효율성
조건문의 성능 저하 등을 개선하고자 할 때
** 비정규화 과정에서 과도한 범위의 데이터를 제어하다 보면 데이터 무결성이나 동기화 같은 측면이 흔들릴 수 있기 때문에 주의해야한다
글 잘 봤습니다.