seaking110 님의 블로그
테이블 설계와 정규화 본문
총정리
제1 정규형
더보기
칼럼 중복 제거 및 원자성 유지
제2 정규형
더보기
제1 정규형을 만족하며 부분 종속 제거
primary key 일부가 아닌 전체가 기준이 되어야한다.
제3 정규형
더보기
제2 정규형을 만족하며 이행적 종속 제거
A -> B, B->C 이면 A -> C 가 되도록 변경
역 정규화, 비 정규화
더보기
데이터를 중복 저장하고 Join을 줄이는 기법
데이터 중복 및 관리는 어려워지나 조회 성능이 상승한다.
데이터 베이스 설계에서 중요한 요소
- 데이터 무결성
- 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미
- 데이터 정합성
- 데이터가 논리적으로 일관되고 신뢰할 수 있도록 유지
- 데이터가여러 테이블에 나뉘어 있어도 항상 일관된 상태를 유지해야 함
- 정합성이 깨지면 데이터 신뢰도가 떨어지고, 시스템 오류가 발생할 가능성이 커짐
- 데이터가 논리적으로 일관되고 신뢰할 수 있도록 유지
- 데이터 독립성
- 데이터 구조가 변경되더라도 사용자나 애플리케이션이나 사용자에게 영향을 최소화
- 논리적 독립성 : 테이블의 컬럼을 추가해도 기존 SQL 쿼리는 정상 작동해야 함
- 물리적 독립성 : DB의 저장 방식이 바뀌어도 애플리케이션 코드에는 영향을 주지 않아야한다.
- 데이터 구조가 변경되더라도 사용자나 애플리케이션이나 사용자에게 영향을 최소화
- 데이터 확장성 (Scalability)
- 시스템이 커지더라도 데이터베이스가 성능을 유지하면서 확장되도록 설계
- 수직 확장 (Scale-Up) : 서버의 성능을 올리는 방식 (CPU, RAM 추가)
- 수평 확장 (Scale-Out) : 데이터베이스를 여러 개로 나누어 처리하는 방식 (샤딩, 레플리카)
- 인덱싱 (Indexing) : 조회 속도를 빠르게 하기 위해 인덱스 사용
- 시스템이 커지더라도 데이터베이스가 성능을 유지하면서 확장되도록 설계
- 데이터 일관성 (Consistency, ACID)
- 데이터베이스 트랜잭션이 안정적으로 실행되도록 보장하는 4가지 속성
- 데이터 보안 (Security)
- 데이터베이스의 접근 권한 관리
- 접근 제어, 암호화, 로그 및 감사 (Audit) : 누가 데이터를 변경했는지 기록
정규화란 무엇인가
- 데이터베이스 중복을 줄이고, 데이터 무결성을 유지하며 성능을 최적화하기 위해 데이터를 구조화하는 과정
- 백엔드 개발자는 데이터베이스 설계나 아키텍처 설계, DB설계를 잘해야 한다!!
제 1 정규형 (1NF) - 중복 제거 및 원자성 유지
- 모든 컬럼이 원자적 값을 가져야 함
- 컬럼에 중복 데이터가 포함되면 안됨
제 2 정규형 (2NF) - 부분적 종속 제거
- 1 정규형을 만족하며
- 모든 컬럼이 완전 함수적 종속을 가져야 한다! 즉 PK의 일부가 아닌 전체를 기준으로 결정
- 매핑 테이블을 따로 생성할 수도 있음
제 3 정규형 (3NF) - 이행적 종속 제거
- 2 정규형을 만족하며
- 이행적 종속을 제거애햐한다 즉 A - > b b- > c 관계라면 A-> C 가 되도록 변경
4,5,6 정규화는 실무에서 거의 사용하지 않음!
제 4 정규형 (4NF) - 다치 종속 제거
제 5 정규형 (5NF) - 조인 종속 제거
제 6 정규형 (6NF) - 비정규 조인 제거
역정규화 (Denormalization) 또는 비정규화 (De-normalization)
- 데이터를 중복 저장하고 join의 필요성을 줄이는 기법이 역 정규화 또는 비 정구화
역 정규화
- 정규화된 데이터를 성능 향상을 위해 일부 중복 저장하여 조회 속도를 높이는 방법
- join을 줄이고 읽기 성능을 향상
- 대신 일관성 유지 비용 증강
- 대량 조회가 많고 쓰기보다 읽기 성능이 중요한 경우에 사용
- 필요한 상황
- 조회 성능 최적화
- 읽기가 많고 쓰기가 적은 경우
- 데이터 중복보다 성능이 중요한 경우
- 조인 비용이 높은 관계형 데이터
역정규화 기법
중복된 컬럼 추가
중복된 테이블 저장
계산된 필드 저장
이력 테이블 사용
역정규화의 장점과 단점
장점
|
단점
|
조인을 줄여 조회 성능 향상
|
데이터 중복 증가(관리 어려움)
|
복잡한 SQL을 단순화하여 쿼리 최적화
|
데이터 수정 시 일관성 유지 어려움
|
읽기가 많은 경우 효율적
|
쓰기 성능이 낮아질 수 있음
|
'Today I Learned' 카테고리의 다른 글
뉴스 피드 팀 프로젝트를 마치며 (0) | 2025.02.20 |
---|---|
[Git] Conventional Commits에 대해 (0) | 2025.02.18 |
JPA를 이용한 일정관리 프로그램 트러블 슈팅 (0) | 2025.02.13 |
JPA (0) | 2025.02.10 |
JPA 꿀팁 (0) | 2025.02.10 |