트랜잭션
- 하나의 연속적인 업무 단위
- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
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년 신유형 반영) 강의에 대해
공부 및 개인적으로 정리한 글 입니다.