테이블 설계
JeongSeulho
2025년 01월 18일
준비중...
클립보드로 복사
DB 설계 기준과 DB 설계를 잘못한 경우 문제들
- 하나의 테이블에는 하나의 관심사만
- 테이블 하나에 여러 관심사가 있으면 insert, update, delete에서 문제 발생
- 하나의 테이블에 직원 정보와 부서 정보를 함께 저장한다고 가정
insertion anomalies
- 데이터 삽입 시 이상 현상
중복 데이터 발생
많아지는 null 값
- 만약 부서를 배정받지 않은 직원이 들어온다면?
null 값이 많으면 생기는 문제점
- null에 대해 join 하는 경우 상황에 따라 예상과 다른 결과 발생
- null 값이 있는 컬럼에 aggregate 함수를 사용 시 주의 필요(
COUNT
는 null 값을 포함하지 않음)- 불필요한 용량 소모
자연스럽지 않은 임시 row 삽입
QA
부서가 만들어졌지만 아직 직원이 없다면?
임시 row 삭제
- 임시
QA
부서를 삭제하려면?
deletion anomalies
- 데이터 삭제 시 이상 현상
데이터 유실
QA
부서의 1명있던YUJIN
직원을 삭제하려면?QA
부서 자체도 없어짐
update anomalies
- 데이터 수정 시 이상 현상
데이터 불일치
DEV
부서의 이름을DEV1
로 변경되었는데JINHO
의 부서 이름만 변경된 경우(실수)- 또한 모든 직원의 부서 이름을 변경해야 함
올바른 DB schema 설계
- 의미적으로 관련있는 attribute들을 하나의 테이블에 모아두는 것이 좋음(하나의 테이블에 하나의 관심사만)
- 중복 데이터를 최소화
- join 연산에서 가짜 데이터가 생기지 않도록
- null 값 최소화
단, 성능 향상을 위해 테이블을 나누지 않는 경우도 있음(join 연산이 많은 경우)