while (1): study();

2장. 데이터 모델과 SQL 본문

학습/SQLD

2장. 데이터 모델과 SQL

전국민실업화 2021. 7. 13. 19:50
728x90

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(*)를 사용할 시 오류가 발생할 확률이 높음

728x90

'학습 > 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
Comments