* 관계를 고려한 트랜잭션 구현
1) 자식 테이블 기준으로 부모 테이블이 필수 관계라면, 부모 레코드를 먼저 입력해야 함
자식 레코드 입력시, 외래 키에 부모의 식별자 값을 반드시 입력해야 하기 때문
2) 부모 엔터티 기준으로 자식 엔터티도 필수 관계라면, 부모와 자식 레코드 입력을
한 트랜잭션으로 묶어서 처리해야 함
부모 레코드 입력은 성공했는데 자식 레코드 입력은 실패하면 안 되기 때문
3) 부모 레코드와 함께 첫번째 자식 레코드를 입력한 이후, 두 번째 자식 레코드부터는 개별적으로
입력할 수도 있는데 이는 업무적인 트랜잭션 정의에 의해 결정됨
> 여러 행을 읽어 값을 집계할 때는 NULL값을 연산 대상에서 제외함
> 식별자: 엔터티에서 데이터를 유일하게 식별할 수 있는 속성
(식별자를 통해 엔터티의 본질을 규정)
* 함수 종속성: 속성 간 대응 관계를 나타내는 개념
> "A를 알면 B를 알 수 있다" (A: 결정자, B: 종속자)
* 트랜잭션의 특성(ACID)
1) 원자성(Atomicity)
- 트랜잭션의 작업은 모두 수행되거나 모두 수행되지 않아야 함
2) 일관성(Consistency)
- 트랜잭션이 완료되면 데이터 무결성이 일관되게 보장되어야 함
3) 고립성(Isolation)
- 트랜잭션이 다른 트랜잭션으로부터 고립된 상태로 수행되어야 함
4) 지속성(Durability)
- 트랜잭션이 완료되면 장애가 발생하더라도 변경 내용이 지속되어야 함
* 정규화하지 않고 같은 데이터를 중복해서 입력하도록 설계하면
트랜잭션 내에서 데이터를 일관성 있게 처리하더라도 이후에 언제든 정합성이 훼손될 수 있음
온라인 트랜잭션 처리시스템을 위한 설계 방법론인 ER(개체관계형) 모델링에서
정규화를 중요하게 다루는 이유
* SQL문의 종류
1) DML문: SELECT, INSERT, UPDATE, DELETE, MERGE
2) TCL문: COMMIT, ROLLBACK, SAVEPOINT
3) DDL문: CREATE, ALTER, DROP, RENAME, TRUNCATE
4) DCL문: GRANT, REVOKE
* 일반 집합 연산자
- UNION 연산(합집합 연산)은 집합 연산자 중 UNION / UNION ALL 연산자로 구현
- INTERSECTION 연산(교집합 연산)은 집합 연산자 중 INTERSECT 연산자로 구현
- DIFFERENCE 연산(차집합 연산)은 집합 연산자 중 EXPERT / MINUS 연산자로 구현
- PRODUCT 연산(곱집합 연산)은 조인 문법 중 CROSS JOIN으로 구현
* NULL 산술 연산
- NULL과의 산술 연산 결과는 항상 NULL이다. 따라서, NULL을 포함한 칼럼에 대해 산술 연산 시에는
NVL 함수나 CASE 표현식, DECODE 함수 등을 통해 NULL을 특정 값(ex. NVL(1,0))으로 치환한 후
연산하는 것이 일반적
* ORDER BY 절
- 정렬 기준이 되는 표현식을 기술함
- ASC 또는 DESC 키워드를 생략하면, 기본값인 ASC가 적용되어 오름차순으로 정렬됨
* 등가조인
- 조인 조건이 모두 등호(=)인 조인
- 값이 동일한 경우에만 행이 반환됨
* 비등가조인
- 등호 외의 다른 조인 조건이 있는 조인
* 셀프조인
- 같은 테이블 간에 조인을 수행하는 것
* 아우터조인
- 아우터 집합은 조인 성공 여부에 상관 없이 무조건 결과 집합에 포함되며, 컬럼 값도 정상적으로 반환함
(아우터조인에서 반대쪽 이너 집합은 조인에 성공한 데이터만 결과 집합에 포함(컬럼 값도 정상적으로 반환)되며,
조인에 실패한 이너 쪽 컬럼 집합은 NULL을 반환함 /
조건절에 (+) 기호가 붙은 쪽이 이너 집합, (+) 기호가 붙지 않은 쪽이 아우터 집합)
'IT > SQL' 카테고리의 다른 글
[MySQL] GROUP BY 사용법 (0) | 2024.03.09 |
---|---|
[MySQL] JSON_TABLE (0) | 2023.09.14 |
SQLD 내용 정리 4 (0) | 2021.04.11 |
SQLD 내용 정리3 (0) | 2021.04.04 |
SQLD 내용 정리1 (0) | 2021.03.21 |