728x90
# 트랜잭션
트랜잭션은 데이터베이스의 논리적 연산 단위이다.
계좌이체를, 예를 들어 생각해 보자. 돈을 보내는 사람의 계좌에서 이체금액을 차감하고, 돈을 받는 사람의 계좌에 이체금액을 가산한다. 즉, '계좌이체'라는 업무는 이렇게 2가지 단계로 진행되며, 데이터 정합성을 위해 이 두 가지 작업은 전부 실행되든지 전부 취소되든지 해야 한다. 하나의 업무 단위로 묶여서 처리돼야 한다는 것이고, 이러한 업무 단위를 '트랜잭션'이라고 한다.
고객이 상품을 구매하면서 발생하는 것이 주문이다.
또한 하나의 주문은 여러 개의 상품을 구매할 수 있다. 위 그림은 이에 대한 모델을 나타낸다.
그렇다면 주문과 주문상세의 데이터는 함께 발생하는지, 독립적으로 발생하는지를 생각해 보아야 한다.
위의 모델은 주문과 주문상세 모델의 관계가 선택적임을 표현하고 있다.
위의 관계는, 주문에 대해 주문상세 데이터가 없을 수도 있다는 것을 나타낸다.
주문과 주문상세의 데이터가 동시에 발생된다면 당연히 계좌이체의 경우처럼 하나의 트랜잭션으로 묶어서 처리해야 한다.
트랜잭션을 하나로 묶는다는 것은, All or Nothing인 원자성이 보장되도록 개발을 해야 한다는 것이다.
즉 커밋의 단위를 하나로 묶어야 함을 의미한다. 그래야만 트랜잭션은 전체가 실행되거나 혹은 전체가 취소될 수 있다.
의사코드 (Pseudo Code)로 표현하면 다음과 같다.
//고객의 주문 발생
주문API {주문입력 (주문번호=>110001, 고객명=>A, ...);
주문상세입력 (주문번호=>110001, 상품번호=>1234, ...);
commit();}
출저 : SQL 전문가 가이드
728x90
'데이터베이스(DB) > SQLD' 카테고리의 다른 글
[SQLD 1-2-5] 데이터 모델과 SQL - 본질식별자 vs 인조식별자 (37) | 2024.05.12 |
---|---|
[SQLD 1-2-4] 데이터 모델과 SQL - Null 속성의 이해 (31) | 2024.05.11 |
[SQLD 1-2-2] 데이터 모델과 SQL - 관계와 조인의 이해 (38) | 2024.05.10 |
[SQLD 1-2-1] 데이터 모델과 SQL - 정규화 (32) | 2024.05.09 |
[SQLD 1-1-5] 데이터 모델링의 이해 - 식별자 (31) | 2024.05.07 |