정합성
데이터가 서로 모순 없이 일치하는 상태입니다.
예시: 정합성이 깨진 상태
계좌 이체: A → B로 10만원
A 잔액: 100,000 → 0 (출금 완료)
B 잔액: 0 → 0 (입금 안 됨)
총합이 100,000 → 0으로 줄어듦 → 정합성 깨짐
예시: 정합성이 유지된 상태
A 잔액: 100,000 → 0 (출금)
B 잔액: 0 → 100,000 (입금)
총합이 100,000 → 100,000으로 동일 → 정합성 유지
정합성이 깨지는 경우
| 상황 | 예시 |
|---|---|
| 중복 데이터 불일치 | 주문 테이블엔 "배송중", 배송 테이블엔 "배송완료" |
| 참조 무결성 위반 | 삭제된 유저의 주문이 남아있음 |
| 계산 불일치 | 주문 총액과 상품 합계가 다름 |
| 동시성 문제 | 재고 10개인데 동시에 15개 판매됨 |
ACID와의 관계
Consistency(일관성) = 데이터 정합성을 보장하는 것
트랜잭션 실행 전: 정합성 O
트랜잭션 실행 후: 정합성 O (보장)
정합성 vs 무결성
| 용어 | 의미 |
|---|---|
| 무결성 (Integrity) | 데이터가 규칙을 만족 (NOT NULL, FK 등) |
| 정합성 (Consistency) | 데이터끼리 서로 일치 |
-- 무결성: age가 음수면 안 됨
CHECK (age >= 0)
-- 정합성: 주문 총액 = 상품 가격 합계
orders.total = SUM(order_items.price)
비슷하게 쓰이지만, 정합성은 데이터 간의 일치에 초점이 있습니다.