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. 본질식별자와 인조식별자 

  • 본질식별자: 원조 식별자, 업무 프로세스에 존재하는 식별자, 가공되지 않은 원래의 식별자 
  • 인조식별자: 대리 식별자, 모델링 과정에서 인위적으로 생성된 식별자, 주식별자의 속성이 두 개 이상인 경우 그 속성들을 하나로 묶어서 사용하는 식별자 
  • 모델링과정에서 복합식별자를 인조식별자로의 전환하기도 한다. 
    예: 주문 테이블의 주문일자+주문순서 => 주문번호