트랜잭션
- 트랜잭션은 데이터베이스의 논리적 연산단위
- 계좌이체를 통해 트랜잭션을 설명할 수 있음
- 돈을 보내는 사람의 계좌에서 이체금액을 차감하고, 돈을 받는 사람의 계좌에 이체금액을 가산
- 계좌이체라는 업무는 위와 같은 두 가지 단계로 진행되며, 데이터 정합성을 위해 위 작업은 전부 실행되든지 아니면 전부 취소되든지 해야 함
- 즉, 하나의 업무 단위로 묶여서 처리돼야 한다는 것이고 이러한 업무 단위를 트랜잭션이라고 함
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// A → B 계좌이체 | |
계좌이체API { | |
잔고수정(고객번호=>A, 수정값=>현재잔고-이체금액); | |
잔고수정(고객번호=>B, 수정값=>현재잔고+이체금액); | |
commit(); | |
} |
부연 설명
- 계좌이체를 하기 위해서는 먼저 A 고객의 잔고에서 이체금액을 차감하고, B 고객의 잔고에 이체금액을 가산해야 함
- 중요한 것은 잔고를 차감하고 가산하는 단계가 모두 완료된 후에 커밋을 수행하는 것
- 잔고 차감/가산 단계가 모두 성공해야지만 커밋이 수행되어 정상적인 데이터를 반영할 수 있음
데이터 모델링의 트랜잭션
- 데이터 모델링 진행 시에도 트랜잭션을 표현할 수 있음
- 아래 모델에서 고객이 상품을 구매하면서 발생하는 것이 주문이며 하나의 주문은 여러 개의 상품을 구매할 수 있음
- 해당 모델은 주문이 발생하면 주문상세 데이터도 함께 발생함
- IE 표기법에서는 필수적인 관계일 경우 관계선 끝에 원을 붙이지 않으며 바커 표기법은 필수일 경우 관계선을 실선으로 표기함
- 해당 모델은 주문이 발생하면 주문상세 데이터도 함께 발생함

- 아래 모델은 주문과 주문상세 모델의 관계가 선택적임을 표현
- 하지만 일반적인 쇼핑몰 업무에서는 선택적일 수 없음
- 대부분의 관계는 선택적인 경우가 더 많기 때문에 모델 작성자가 습관적으로 선택적 관계로 표현했을 가능성이 큼
- 모델 작성자는 이를 꼭 인지하고, 습관적으로 관계의 선택사양을 간과하고 있는지 고려해봐야 함

- 일반적인 쇼핑몰 모델에서 주문과 주문상세는 [그림 I-2-18]이 올바른 모델
- 해당 모델은 주문과 주문상세의 데이터가 태생적으로 동시에 발생된다면, 당연히 계좌이체의 경우처럼 하나의 트랜잭션으로 묶어서 처리해야 함
- 트랜잭션을 하나로 묶는다는 것은 `All or Nothing`인 원자성이 보장되도록 개발을 해야 한다는 것
- 즉, 커밋 (Commit)의 단위를 하나로 묶어야 함을 의미
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 고객의 주문 발생 | |
주문API { | |
주문입력(주문번호=>110001, 고객명=>A, ...); | |
주문상세입력(주문번호=>110001, 상품번호=>1234, ...); | |
commit(); | |
} |
참고
SQL 전문가 가이드 2020 개정판 - 한국데이터산업진흥원
반응형
'DB > SQL 전문가 가이드' 카테고리의 다른 글
[과목 I 2장 5절] 본질식별자 vs. 인조식별자 (0) | 2025.03.17 |
---|---|
[과목 I 2장 4절] Null 속성의 이해 (0) | 2025.03.17 |
[과목 I 2장 2절] 관계와 조인의 이해 (0) | 2025.03.17 |
[과목 I 2장 1절] 정규화 (0) | 2025.03.17 |
[과목 I 1장 5절] 식별자 (0) | 2025.02.23 |