Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

테이블 설계와 정규화 본문

Today I Learned

테이블 설계와 정규화

seaking110 2025. 2. 17. 19:15

총정리

제1 정규형

더보기

칼럼 중복 제거 및 원자성 유지

제2 정규형

더보기

제1 정규형을 만족하며 부분 종속 제거

primary key 일부가 아닌 전체가 기준이 되어야한다.

제3 정규형

더보기

제2 정규형을 만족하며 이행적 종속 제거

A -> B, B->C 이면 A -> C 가 되도록 변경

역 정규화, 비 정규화

더보기

데이터를 중복 저장하고 Join을 줄이는 기법

데이터 중복 및 관리는 어려워지나 조회 성능이 상승한다.

 

 

 

 

데이터 베이스 설계에서 중요한 요소

  1. 데이터 무결성
    • 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미
  2. 데이터 정합성
    • 데이터가 논리적으로 일관되고 신뢰할 수 있도록 유지
      • 데이터가여러 테이블에 나뉘어 있어도 항상 일관된 상태를 유지해야 함
      • 정합성이 깨지면 데이터 신뢰도가 떨어지고, 시스템 오류가 발생할 가능성이 커짐
  3. 데이터 독립성
    • 데이터 구조가 변경되더라도 사용자나 애플리케이션이나 사용자에게 영향을 최소화
      • 논리적 독립성 : 테이블의 컬럼을 추가해도 기존 SQL 쿼리는 정상 작동해야 함
      • 물리적 독립성 : DB의 저장 방식이 바뀌어도 애플리케이션 코드에는 영향을 주지 않아야한다.
  4. 데이터 확장성 (Scalability)
    • 시스템이 커지더라도 데이터베이스가 성능을 유지하면서 확장되도록 설계
      • 수직 확장 (Scale-Up) : 서버의 성능을 올리는 방식 (CPU, RAM 추가)
      • 수평 확장 (Scale-Out) : 데이터베이스를 여러 개로 나누어 처리하는 방식 (샤딩, 레플리카)
      • 인덱싱 (Indexing) : 조회 속도를 빠르게 하기 위해 인덱스 사용
  5. 데이터 일관성 (Consistency, ACID)
    • 데이터베이스 트랜잭션이 안정적으로 실행되도록 보장하는 4가지 속성
  6. 데이터 보안 (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