while (1): study();
2장. 데이터 모델과 SQL 본문
1절. 정규화
1. 제1정규형
모든 속성은 반드시 하나의 값을 가져야 한다.
(다중값, 중복 배제)
2. 제2정규형
엔터티의 일반속성은 주식별자 전체에 종속적이어야 한다.
(부분 종속(Partial Dependency)이 발생해서는 안 된다)
* 함수적 종속성(Functional Dependency): 결정자(Determinant)를 기준으로 종속자(Dependent)가 종속됨
3. 제3정규형
엔터티의 일반속성 간에는 서로 종속적이지 않다.
(이행적 종속(Transitive Dependency)가 발생해서는 안 된다)
4. 반정규화와 성능
- 반정규화: 성능을 위해 데이터 중복을 허용
- 반정규화를 통해 성능이 향상되는 경우: 조인 제거
- 반정규화를 통해 성능이 저하되는 경우: 데이터 불일치, 불필요한 트랜잭션 추가
→ 정규화 이후 꼭 필요할 때에만 반정규화
2절. 관계와 조인의 이해
1. 조인
SELECT B.고객명
FROM 주문 A, 고객 B
WHERE A.주문번호 = '1100001'
AND A.고객번호 = B.고객번호
관계에 의해 상속된 속성을 매핑키로 활용하여 데이터를 결합
2. 계층형 데이터 모델
SELECT B.ENAME
FROM EMP A, EMP B
WHERE A.ENAME = 'SMITH'
AND A.MGR = B.EMPNO
자기 자신에게 관계가 발생 → 셀프 조인
3. 상호배타적 관계
- UNION ALL
SELECT B.개인고객명
FROM 주문 A, 개인고객 B
WHERE A.주문번호 = 1100001
AND A.고객구분코드 = '01'
AND A.개인/법인번호 = B.개인번호
UNION ALL
SELECT A.법인명
FROM 주문 A, 법인고객 B
WHERE A.주문번호 = 1100001
AND A.고객구분코드 = '01'
AND A.개인/법인번호 = A.법인번호
조인 결과가 없으면 공집합(NO ROWS)
- OUTER JOIN
SELECT COALESCE(B.개인고객명, C.법인명) 고객명
FROM 주문 A LEFT OUTER JOIN 개인고객 B
ON (A.개인/법인번호 = B.개인번호) LEFT OUTER JOIN 법인고객 C
ON (A.개인/법인번호 = C.법인번호)
WHERE A.주문번호 = 1100001
조인 결과가 없으면 NULL값을 가진 한 건의 ROWS(NULL ROWS)
*COALESCE: NULL이 아닌 첫 표현식을 반환
3절. 모델이 표현하는 트랜잭션의 이해
선택적 관계 표현 > 필수적 관계 표현
- 트랜잭션: 하나의 업무단위, 커밋을 하나로 묶어서 처리, 원자성(All or Nothing) 보장
4절. Null 속성의 이해
1. Null의 연산은 언제나 Null이다.
is null / is not null 연산만 가능
2. 집계함수는 Null값을 제외하고 처리된다.
* NVL: 첫번째 인자가 Null이면 두번째 인자를 반환
5절. 본질식별자 vs 인조식별자
본질식별자 > 인조식별자
- 인조식별자(외부식별자)를 사용할 경우 문제점
1) 중복 데이터로 인한 품질 저하
2) 불필요한 인덱스 생성
추가
제1정규화
다가속성(유사한 속성을 나열한 반복 속성 또한 일종의 다가속성) → 별도의 엔터티로 제1정규화
조인
기준 테이블이 선택관계인 경우(FK에 NULL이 존재하는 경우) 아우터 조인
기준 테이블이 필수관계인 경우(FK가 NOT NULL인 경우) 이너 조인
트랜잭션
부모-자식, 자식-부모가 모두 필수이면 레코드 입력을 하나의 트랜잭션으로 처리
효율적인 GROUP BY
SELECT 부서번호, [ ], AS 연봉 FROM 사원 GROUP BY 부서번호;
--1
SUM((급여 * 12) + NVL(수당, 0))
--2
(SUM(급여) * 12) + SUM(NVL(수당, 0))
--3 * 미리 집계하여 연산량 감소
(SUM(급여) * 12) + NVL(SUM(수당), 0)
효율적인 NULL 집계
--1
MAX(NVL(주문순번, 0)) + 1
--2 미리 집계하여 탐색범위 감소
NVL(MAX(주문순번), 0) + 1
함수 종속
A(결정자)를 알면 B(종속자)를 알 수 있다
트랜잭션의 특징
ACID (atomicity, consistency, isolation, durability)
일관성: 데이터 무결성이 일관되게 보장
식별자 순번 속성 채번
COUNT(*)를 사용할 시 오류가 발생할 확률이 높음
'학습 > SQLD' 카테고리의 다른 글
데이터베이스와 성능 (0) | 2021.08.13 |
---|---|
3장. 관리 구문 (0) | 2021.07.26 |
2장. SQL 활용 (0) | 2021.07.21 |
1장. SQL 기본 (0) | 2021.07.15 |
1장. 데이터 모델링의 이해 (0) | 2021.07.11 |