엔터티를 작은 단위로 분리하는 과정(엔터티 개수 증가)
목적: 데이터의 정확성과 일관성을 유지하고 보장(데이터 정합성)
조회 성능: 처리 조건에 따라 향상 또는 저하
입력, 수정, 삭제 성능: 일반적으로 향상
cf) 인덱스 생성
- 조회 성능: 일반적으로 향상
- 입력, 수정, 삭제 성능: 저하
🌱 예시
번호 이름 과목 101 홍길동 국어, 수학 102 이영희 영어
->
번호 이름 과목 101 홍길동 국어 101 홍길동 수학 102 이영희 영어
🌱 예시
학생ID 과목 교수명 성적 1001 수학 김교수 A 1001 영어 이교수 B 1002 수학 김교수 C 1002 과학 박교수 A
->
1. 학생 성적 테이블
학생ID 과목 성적 1001 수학 A 1001 영어 B 1002 수학 C 1002 과학 A
2. 과목_교수 테이블
과목 교수명 수학 김교수 영어 이교수 과학 박교수
사원번호 사원이름 부서번호 부서명 101 홍길동 D01 인사부 102 김영희 D02 회계부 103 이철수 D01 인사부
->
1. 사원 테이블
사원번호 사원이름 부서번호 101 홍길동 D01 102 김영희 D02 103 이철수 D01
2. 부서 테이블
부서번호 부서명 D01 인사부 D02 회계부
주의사항
데이터의 중복을 허용하거나 데이터를 그루핑하는 과정
목적: 데이터 조회 성능 향상
조회 성능: 향상
입력, 수정, 삭제 성능: 저하될 수 있음
데이터 합성 이슈 발생할 수 있음
정규화가 끝난 후 수행
JOIN 이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려
1:1 관계 테이블 병합

1:M 관계 테이블 병합

슈퍼 서브 타입 테이블 병합테이블 수직 분할(속성 분할)

테이블 수평 분할(인스턴스 분할, 파티셔닝)

중복 테이블 추가: 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우통계 테이블 추가: 통계치를 미리 계산하여 저장하는 경우이력 테이블 추가: ex) 상품가격 이력 테이블에서 과거의 상품가격에 대한 데이터 관리부분 테이블 추가: ex) 회원 대상 메일 발송건이 다량으로 생기는 경우 메일 발송에 필요한 정보만 부분 테이블로 생성중복 컬럼 추가: JOIN 할 필요가 많아 컬럼을 추가하는 것이 성능 향상에 유리한 경우 고려파생 컬럼 추가: 부하가 염려되는 계산값을 미리 컬럼으로 추가이력 테이블 컬럼 추가: 대량의 이력 테이블을 조회할 때 속도 저하를 대비트랜잭션: 데이터를 조작하기 위한 하나의 논리적인 작업 단위
원자성(Atomicity): 트랜잭션은 더 이상 분리가 불가능한 업무의 최소단위이므로, 전부 처리되거나 아예 하나도 처리되지 않아야 함일관성(Consistency): 하나의 트랜잭션이 완료된 후에도 데이터베이스는 여전히 일관된 상태여야 함고립성(Isolation): 실행 중인 트랜잭션의 중간 결과에 다른 트랜잭션이 접근할 수 없음지속성(Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 데이터베이스에 영속적으로 저장됨NULL: 존재하지 않음
가로연산: NULL 이 포함되어 있으면 결과값은 NULL세로연산: 다른 인스턴스의 데이터와 연산할 때는 NULL 값을 제외본질식별자(Natural Identifier): 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자
인조식별자(Artificial Identifier): 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자
ex) 주문번호를 주문일자 + 순번 으로 만드는 것