SQL

SQLD - 데이터 모델과 SQL(모델이 표현하는 트랜잭션의 이해, Null 속성의 이해, 본질 식별자 VS 인조 식별자)

taey 2024. 11. 15. 22:10

트랜잭션이란

  • 하나의 연속적인 업무 단위를 말함
  • 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
  • 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음

 

※ 주의

  1. 한 트랜잭션에서 연관 사건이 독립적으로 발생하면 안 됨
  2. 부분 COMMIT 불가
    • 동시 COMMIT 또는 ROLLBACK 처리

 

필수적, 선택적 관계와 ERD

  • 두 엔터티의 관계가 서로 필수적일 때, 하나의 트랜잭션을 형성
  • 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현

 

IE 표기법)

  • 원을 사용하여 필수적 관계와 선택적 관계를 구분
  • 필수적 관계에는 원을 그리지 않는다.
  • 선택적 관계에는 관계선 끝에 원을 그린다.

바커 표기법)

  • 실선과 점선으로 구분
  • 필수적 관계는 관계선을 실선으로 표기
  • 선택적 관계는 관계션을 점선으로 표기

 

NULL 이란

  • DBMS에서 아직 정해지지 않은 값을 의미
  • 0과 빈문자열('')과는 다른 개념
  • 모델 설계 시 각 컬럼별로 NULL을 허용할 지를 결정(Nullable Column)

 

NULL의 특성

  1. NULL을 포함한 연산 결과는 항상 NULL
  2. 집계함수는 NULL을 제외한 연산 결과 리턴
    ※ sum, avg, min, max 등의 함수는 항상 NULL을 무시한다.

 

NULL의 ERD 표기법

  • IE 표기법에서는 NULL 허용 여부를 알 수 없음
  • 바커 표기법에서는 속성 앞에 동그라미가 NULL 허용 속성을 의미

 

NULL 관련 함수

  • NVL(Oracle)(대상, NULL일 시 치환값), ISNULL(SQL Server)
  • NVL2(대상, NULL이 아닐 시 치환값, NULL일 시 치환값)
  • COLLAPSE(expr1, expr2, ...) : 처음으로 NULL이 아닌 값 반환 
  • DECODE, CASE(대상, 대상과 비교할 값 1, 치환값 1, 대상과 비교할 값 2, 치환값2 , ... , default) 
    • CASE 절에서 ELSE가 없으면 NULL로 반환

 


식별자 구분(대체 여부에 따른)

  1. 본질 식별자
    1. 업무에 의해 만들어지는 식별자(꼭 필요한 식별자)
  2. 인조 식별자
    1. 인위적으로 만들어지는 식별자(꼭 필요하지 않지만 관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)
    2. 본질 식별자가 복잡한 구성을 가질 때, 인위적으로 생성
    3. 주로 각 행을 구분하기 위한 기본키로 사용되며 자동으로 증가하는 일련번호 같은 형태임

 

  1. PK : 주문 번호 + 상품 번호로 설계
  2. PK : 주문 번호 + 주문 순번(주문 순번이라는 컬럼을 생성)
  3. PK : 주문 상세 번호(인조 식별자 생성)

※ 따라서 인조 식별자는 다음의 단점을 가지게 된다.

  1. 중복 데이터 발생 가능성 → 데이터 품질 저하
  2. 불필요한 인덱스 생성 → 저장 공간 낭비 및 DML 성능 저하

※ 인덱스는 원래 조회 성능을 향상시키기 위한 객체이며, 인덱스는 DML(INSERT / UPDATE / DELETE)시 INDEX SPLIT 현상으로 인해 성능이 저하된다.