SQLD 1과목(2) | 데이터 모델과 SQL
2025. 3. 2. 21:13ㆍ기반기술/Database
1. 정규화
1-1. 제 1정규형
1-2. 제 2정규형
1-3. 제 3정규형
1-4. 주의사항
2. 반정규화
2-1. 테이블 반정규화
2-2. 컬럼 반정규화
2-3. 관계 반정규화 (중복 관계 추가)
3. 트랜잭션
4. NULL
5. 본질식별자와 인조식별자
1. 정규화
1-1. 정규화
- 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정
- 정규화를 할 경우 데이터 조회성능은 처리 조건에 따라 향상되는 경우도 있고 저하되는 경우도 있다
- 하지만 입력, 수정, 삭제 성능은 일반적으로 향상된다고 볼 수 있다.
- 모든 엔터티를 무조건 분리하면 안 되기 때문에 정규화를 하기 위한 일정한 룰이 존재함
1-2. 제 1정규형, 제 2정규형, 제 3정규형
정규형의 종류 | 규칙 | 문제점 |
제 1정규형 | 모든 속성은 반드시 하나의 값만 가져야 한다. | 데이터를 꺼내쓸 때 불필요한 split 사용해야하는 번거로움 |
유사한 속성이 반복되는 경우도 대상. | 모든 인스턴스가 추가된 모든 속성값을 가지고 있지 않을 수 있으므로 공간의 낭비가 발생 | |
제 2정규형 | 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다. (하나의 주식별자에만 종속X) |
입력 이상현상: 주문이 되지 않은 음료는 등록할 수 없다 |
수정 이상현상: 음료명이 변경되는 경우 해당 음료에 대한 모든 주문 데이터가 모두 변경되어야함 | ||
제 3정규형 | 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다. | 테이블 분리가 적절히 되지 않음 |
2. 반정규화
2-0. 반정규화
- 반정규화: 데이터 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정
- 지나친 정규화는 오히려 성능저하의 원인이 되어 (여러번의 JOIN 등) 반정규화를 통해 성능을 개선해야 하기도 한다.
- 조회 성능은 향상될 수 있으나, 입력/수정/삭제 성능은 저하될 수 있고 데이터 정합성 이슈가 생길 수 있다.
- 종류: 테이블 반정규화, 컬럼 반정규화, 관계 반정규화
2-1. 테이블 반정규화
테이블 병합 | 1:1 관계 테이블 병합 | 비교적 수월, 부작용 적음 |
1:M 관계 테이블 병합 | 1쪽에 해당하는 테이블 속성의 개수가 많을 수록 병합시 중복데이터가 많아지므로 적합치 못함 | |
슈퍼-서브 타입 테이블 병합 | ||
테이블 분할 | 테이블 수직 분할 (속성 분할) | 자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 가지고 있을 때 고려 1:1 관계 성립 |
테이블 수평 분할 (인스턴스 분할, 파티셔닝) | 엔터티의 인스턴스를 특정 기준(주문일자 등등)으로 별도 엔터티로 분할 | |
테이블 추가 | 중복 테이블 추가 | 데이터 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔터티 추가 |
통계 테이블 추가 | 주문데이터를 이용하여 월매출 테이블에 통계치를 미리 계산하여 저장 | |
이력 테이블 추가 | 상품가격 이력 테이블에서 과거의 상품가격에 대한 데이터를 관리 | |
부분 테이블 추가 | 회원 대상 메일 발송건이 다량으로 생기는 경우 메일 발송에 필요한 정보만 부분 테이블로 생성 |
2-2. 컬럼 반정규화
- 중복 컬럼 추가
- 파생 컬럼 추가
- 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식
- 상품 재고, 프로모션 적용 할인가 등
- 이력 테이블 컬럼 추가
2-3. 관계 반정규화 (중복 관계 추가)
3. 트랜잭션
- 트랜잭션: 데이터를 조작하기 위한 하나의 논리적 작업 단위
- 예시: [이벤트 응모 이력 저장 -> 쿠폰 발행]을 하나의 트랜잭션으로 묶어 이 중 하나의 과정이라도 실패하면 롤백한다
- 트랜잭션의 특징
원자성 | 트랜잭션은 더 이상 분리가 불가능한 업무의 최소단위이므로, 전부 처리 되거나 아예 하나도 처리되지 않아야 한다 |
일관성 | 하나의 트랜잭션이 완료된 후에도 데이터베이스의 일관성이 유지 되어야함 (모순X) |
고립성 | 실행 중인 트랜잭션의 중간 결과에 다른 트랜잭션이 접근할 수 없다 |
지속성 | 트랜잭션이 성공적으로 실행 완료되면 그 결과는 데이터베이스에 영속적으로 저장된다. |
4. NULL
- NULL: 값이 없음, 아직 정의되지 않은 값, 0과 다름
- NULL이 포함되어 있는 연산
- 가로 연산 (+, -, >< 등) → NULL이 포함되어 있으면 결과값도 NULL
- 세로 연산 (SUM 등의 함수) → NULL을 제외하고 연산함
5. 본질식별자와 인조식별자
- 본질식별자: 원조 식별자, 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자
- 인조식별자: 대리 식별자, 모델링 과정에서 인위적으로 생성된 식별자, 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자
- 모델링과정에서 복합식별자를 인조식별자로의 전환하기도 한다.
예: 주문 테이블의 주문일자+주문순서 => 주문번호