트랜잭션이란
- 하나의 연속적인 업무 단위를 말함
- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
- 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음
※ 주의
- 한 트랜잭션에서 연관 사건이 독립적으로 발생하면 안 됨
- 부분 COMMIT 불가
- 동시 COMMIT 또는 ROLLBACK 처리
필수적, 선택적 관계와 ERD
- 두 엔터티의 관계가 서로 필수적일 때, 하나의 트랜잭션을 형성
- 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
IE 표기법)
- 원을 사용하여 필수적 관계와 선택적 관계를 구분
- 필수적 관계에는 원을 그리지 않는다.
- 선택적 관계에는 관계선 끝에 원을 그린다.
바커 표기법)
- 실선과 점선으로 구분
- 필수적 관계는 관계선을 실선으로 표기
- 선택적 관계는 관계션을 점선으로 표기
NULL 이란
- DBMS에서 아직 정해지지 않은 값을 의미
- 0과 빈문자열('')과는 다른 개념
- 모델 설계 시 각 컬럼별로 NULL을 허용할 지를 결정(Nullable Column)
NULL의 특성
- NULL을 포함한 연산 결과는 항상 NULL
- 집계함수는 NULL을 제외한 연산 결과 리턴
※ sum, avg, min, max 등의 함수는 항상 NULL을 무시한다.
NULL의 ERD 표기법
- IE 표기법에서는 NULL 허용 여부를 알 수 없음
- 바커 표기법에서는 속성 앞에 동그라미가 NULL 허용 속성을 의미
NULL 관련 함수
- NVL(Oracle)(대상, NULL일 시 치환값), ISNULL(SQL Server)
- NVL2(대상, NULL이 아닐 시 치환값, NULL일 시 치환값)
- COLLAPSE(expr1, expr2, ...) : 처음으로 NULL이 아닌 값 반환
- DECODE, CASE(대상, 대상과 비교할 값 1, 치환값 1, 대상과 비교할 값 2, 치환값2 , ... , default)
- CASE 절에서 ELSE가 없으면 NULL로 반환
식별자 구분(대체 여부에 따른)
- 본질 식별자
- 업무에 의해 만들어지는 식별자(꼭 필요한 식별자)
- 인조 식별자
- 인위적으로 만들어지는 식별자(꼭 필요하지 않지만 관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)
- 본질 식별자가 복잡한 구성을 가질 때, 인위적으로 생성
- 주로 각 행을 구분하기 위한 기본키로 사용되며 자동으로 증가하는 일련번호 같은 형태임
- PK : 주문 번호 + 상품 번호로 설계
- PK : 주문 번호 + 주문 순번(주문 순번이라는 컬럼을 생성)
- PK : 주문 상세 번호(인조 식별자 생성)
※ 따라서 인조 식별자는 다음의 단점을 가지게 된다.
- 중복 데이터 발생 가능성 → 데이터 품질 저하
- 불필요한 인덱스 생성 → 저장 공간 낭비 및 DML 성능 저하
※ 인덱스는 원래 조회 성능을 향상시키기 위한 객체이며, 인덱스는 DML(INSERT / UPDATE / DELETE)시 INDEX SPLIT 현상으로 인해 성능이 저하된다.
'SQL' 카테고리의 다른 글
SQLD - SQL 활용 (집합 연산자, 그룹 함수) (2) | 2024.11.16 |
---|---|
SQLD - SQL 활용(서브 쿼리) (3) | 2024.11.16 |
SQLD - 데이터 모델과 SQL (관계와 조인의 이해) (1) | 2024.11.15 |
SQLD - 데이터 모델과 SQL (정규화) (3) | 2024.11.15 |
SQLD - 데이터 모델링의 이해 (식별자) (2) | 2024.11.15 |