Tech

Diary

Lecture

About Me

개발중

테이블 설계

JeongSeulho

2025년 01월 18일

준비중...
클립보드로 복사

DB 설계 기준과 DB 설계를 잘못한 경우 문제들

  • 하나의 테이블에는 하나의 관심사만
  • 테이블 하나에 여러 관심사가 있으면 insert, update, delete에서 문제 발생
  • 하나의 테이블에 직원 정보와 부서 정보를 함께 저장한다고 가정

insertion anomalies

  • 데이터 삽입 시 이상 현상

중복 데이터 발생

Image

많아지는 null 값

  • 만약 부서를 배정받지 않은 직원이 들어온다면?

Image

null 값이 많으면 생기는 문제점

  • null에 대해 join 하는 경우 상황에 따라 예상과 다른 결과 발생
  • null 값이 있는 컬럼에 aggregate 함수를 사용 시 주의 필요(COUNT는 null 값을 포함하지 않음)
  • 불필요한 용량 소모

자연스럽지 않은 임시 row 삽입

  • QA 부서가 만들어졌지만 아직 직원이 없다면?

Image

임시 row 삭제

  • 임시 QA 부서를 삭제하려면?

Image

deletion anomalies

  • 데이터 삭제 시 이상 현상

데이터 유실

  • QA 부서의 1명있던 YUJIN 직원을 삭제하려면?
  • QA 부서 자체도 없어짐

Image

update anomalies

  • 데이터 수정 시 이상 현상

데이터 불일치

  • DEV 부서의 이름을 DEV1로 변경되었는데 JINHO의 부서 이름만 변경된 경우(실수)
  • 또한 모든 직원의 부서 이름을 변경해야 함

Image

올바른 DB schema 설계

  • 의미적으로 관련있는 attribute들을 하나의 테이블에 모아두는 것이 좋음(하나의 테이블에 하나의 관심사만)
  • 중복 데이터를 최소화
  • join 연산에서 가짜 데이터가 생기지 않도록
  • null 값 최소화

단, 성능 향상을 위해 테이블을 나누지 않는 경우도 있음(join 연산이 많은 경우)