SQLD 트랜잭션, NULL, 본질/인조 식별자

Soondol·2024년 5월 3일

트랜잭션

  • 하나의 연속적인 업무 단위
  • 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
A가 B에게 계좌이체를 하고자 함.
A의 계좌에서는 10만원이 차감됨
하지만 B의 계좌에서는 10만원이 추가되지 않음
  • 위의 경우 하나라도 실패하면 안됨 !
  • 모두 성공하거나 모두 취소되어야함 (All or Nothing) > 하나로 묶으면서 Atomic함.
  • 서로 독립적으로 발생하면 안되며, 부분 Commit 불가 (동시 commit or rollback)
  • 이런 특성을 갖는 연속적인 업무단위를 트랜잭션이라고 함

필수적, 선택적 관계와 ERD

  • 두 Entity의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
  • 두 Entity가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
IE 표기법바커표기법
원(O)을 사용하여 필수적, 선택적 관계 구분실선, 점섬으로 구분
필수적 관계에는 원을 그리지 않음필수적 관계는 실선으로 표기
선택적 관계에는 관계선 끝에 원을 그림선택적 관계는 점선으로 표기

NULL

  • 아직 정해지지 않은 값을 의미함
  • 0, ""과는 다른개념

NULL의 특성

  • NULL을 포함한 연산관계는 항상 NULL
  • 집계함수(sum, avg, min, max 등)는 NULL을 제외한 연산 결과 리턴
IE 표기법바커표기법
NULL허용 여부를 알 수 없음속성 앞에 동그라미가 NULL 허용 속성을 의미

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

  • 본질식별자 : 업무에 의해 만들어지는 식별자 (꼭 필요한 식별자)
  • 인조식별자
    - 인위적으로 만들어지는 식별자 (관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)
    - 본질식별자가 복잡한 구성을 가질 때 인위적으로 생성

주문, 주문이력에 대한 Entity 설계 과정


주문주문이력
주문번호주문번호(FK)
고객번호상품번호
주문수량
주문일자
배송지

주문상세 테이블 설계 시 다음과 같은 식별자를 고려할 수 있음
1. PK: 주문번호 + 상품번호로 설계
- 본질식별자 (주문번호 + 상품번호)
- PK가 주문번호 + 상품번호 이면 하나의 주문번호로 같은 상품의 주문 결과를 저장할 수 없음
2. PK: 주문번호 + 주문순번(새로운 컬럼 생성)
- 하나의 주문에 여 러 상품에 대한 주문 결과 저장 가능
3. PK: 주문상세번호(인조식별자 생성)
- 주문상세번호만이 주식별자 이므로 나머지 정보들이 불필요하게 중복 저장될 위험 발생
- 실제 업무와 상관없는 주문상세번호를 주식별자로 생성하면 쓸모없는 index가 생성됨

  • 따라서 인조식별자는 중복데이터 발생 가능, 불필요한 인덱스 생성의 단점을 가짐

홍쌤의 데이터랩
SQLD 1과목 완벽 정리 (2024년 신유형 반영) 강의에 대해
공부 및 개인적으로 정리한 글 입니다.

0개의 댓글