목차 | |
1. | 정규화 |
2. | 관계와 조인의 이해 |
3. | 모델이 표현하는 트랜잭션의 이해 |
4. | Null 속성의 이해 |
5. | 본질식별자 vs 인조식별자 |
1. 정규화
● 정규화(DB Normalization)의 개념
- 하나에 엔터티에 많은 속성을 넣게 되면, 해당 엔터티를 조회할 때마다 많은 양의 데이터가 조회될 것이므로 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정
- 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보
- 데이터 이상현상을 줄이기 위한 데이터 베이스 설계 기법
- 엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려됨
● 이상현상(Abnormality)
- 정규화를 하지 않아 발생하는 현상(삽입이상, 갱신이상, 삭제이상)
- 특정 인스턴스가 삽입될 때 정의도지 않아도 될 속성까지도 반드시 입력되어야 하는(삽입이상) 현상이 발생함
ex) 부서 정보마 삭제하면 되는데 관련된 사원 정보까지도 함께 삭제되는 현상(삭제이상)
● 정규화 단계
1. 제 1 정규화(1NF)
- 테이블이 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성)을 갖도록 테이블을 분해하는 단계
2. 제 2 정규화(2NF)
- 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블을 분해
- 완전 함수 종속이란, 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정짓는 상태
- 즉, PK(Primary Key)가 2개 이상일 때 발생하며 PK의 일부와 종속되는 관계가 있다면 분리함
- 강의명에 의해 강의실이 달라지는 1 대 1 대응 관계를 갖는 것을 완전 함수 종속성 위배, 같은 말로 부분 함수 종속 관계라고 하는 데, 제 2 정규화는 이러한 부분 함수 종속성을 깨는 것을 목표로 함
3. 제 3 정규화(3NF)
- 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리
- 이행적 종속성이란 A -> B, B -> C의 관계가 성립할 때, A -> C가 성립되는 것을 말함
- (A, B)와 (B, C)로 분리하는 것이 제 3 정규화
※ 결정자와 종속관계
만약 A 속성이 B 속성의 값을 결정하게 되면, 이 때 A는 B의 결정자라고 하며, 반대로 B는 A에 종속된다 표현함. 따라서 위 예제에서는 고객번호가 상품명을 결정자이며, 상품명 역시 가격의 결정자이다.
4. BCNK(Boyce-Codd Normal Form) 정규화
- 모든 결정자가 후보키가 되도록 테이블을 분해하는 것(결정자가 후보키가 아닌 다른 컬럼에 종속되면 안 됨)
5. 제 4 정규화
- 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거
6. 제 5 정규화
- 조인에 의해서 종속성이 발생되는 경우 분해
2. 관계와 조인의 이해
● 관계의 개념
- 엔터티의 인스턴스 사이의 논리적인 연관성
- 관계를 맺는다는 의미는 부모의 식별자를 자식에 상속하고, 상속된 속성을 매핑키(조인키)로 활용 -> 부모, 자식을 연결함
● 관계의 분류
- 존재 관계는 엔터티 간의 상태를 의미
- 행위 관계는 엔터티 간의 어떤 행위가 있는 것을 의미
● 조인의 의미
- 결국 데이터의 중복을 피하기 위해 테이블은 정규화에 의해 분리됨
● 계층형 데이터 모델
- 자기 자신끼리 관계가 발생. 즉 하나의 엔터티 내의 인스턴스끼리 계층 구조를 가지는 경우를 말함
● 상호배타적 관계
- 두 테이블 중 하나만 가능한 관계를 말함
3. 모델이 표현하는 트랜잭션의 이해
● 트랜잭션이란
- 하나의 연속적인 업무 단위를 말함
- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
※ 계좌이체를 예를 들면)
A 고객이 B 고객에게 100만원을 이체하려고 한다고 가정하자.
STEP1) A 고객의 잔액이 100만원 이상인지 확인
STEP2) 이상이면, A 고객 잔액을 -100 UPDATE
STEP3) B 고객 잔액에 +100 UPDATE
이 때, 2번과 3번 과정이 동시에 수행되어야 한다. 즉 모두 성공하거나 모두 취소돼야 함(All or Nothing)
-> 이런 특성을 갖는 연속적인 업무 단위를 트랜잭션이라고 함
※ 주의
1. A 고객 잔액 차감과 B 고객 잔액 가산이 서로 독립적으로 발생하면 안 됨
-> 각각의 INSERT 문으로 개발되면 안 됨
2. 부분 COMMIT 불가
-> 동시 COMMIT 또는 ROLLBACK 처리
● 필수적, 선택적 관계와 ERD
- 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
- 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
IE 표기법)
- 원을 사용하여 필수적 관계와 선택적 관계를 구분
- 필수적 관계에는 원을 그리지 않는다.
- 선택적 관계에는 관계선 끝에 원을 그린다.
바커 표기법)
- 실선과 점선으로 구분
- 필수적 관계는 관계선을 실선으로 표기
- 선택적 관계는 관계선을 점선으로 표기
4. NULL 속성의 이해
● NULL 이란
- DBMS에서 아직 정해지지 않은 값을 의미
- 0과 빈문자열('')과는 다른 개념
- 모델 설계 시 각 컬럼별로 NULL을 허용할 지를 결정(Nullable Column)
● NULL의 특성
1. NULL을 포함한 연산 결과는 항상 NULL
2. 집계함수는 NULL을 제외한 연산 결과 리턴
※ sum, avg, min, max 등의 함수는 항상 NULL을 무시함
● NULL의 ERD 표기법
- IE 표기법에서는 NULL 허용 여부를 알 수 없음
- 바커 표기법에서는 속성 앞에 동그라미가 NULL 허용 속성을 의미함
5. 본질식별자 vs 인조식별자
● 식별자 구분(대체 여부에 따른)
1) 본질식별자
- 업무에 의해 만들어지는 식별자(꼭 필요한 식별자)
2) 인조식별자
- 인위적으로 만들어지는 식별자(꼭 필요하지 않지만 관리의 편이성 등의 이유로 인위적으로 만들어지는 식별자)
1. PK: 주문번호 + 상품번호로 설계
- 주문을 하면 주문번호와 상품번호가 필요하므로 본질식별자(주문번호 + 상품번호)가 됨
- 하지만 PK가 주문번호 + 상품번호이면 하나의 주문번호로 같은 상품의 주문 결과를 저장할 수 없게 됨
2. PK: 주문번호 + 주문순번(주문순번이라는 컬럼을 생성)
- 하나의 주문에 여러 상품에 대한 주문 결과 저장 가능 -> 주문순번으로 인해 구분함
3. PK: 주문상세번호(인조식별자 생성)
- 주문상세번호로 각 주문이력을 구분하기 때문에 같은 주문의 같은 상품이력이 저장될 수 있음
※ 따라서 인조식별자는 다음의 단점을 가지게 됨
1. 중복 데이터 발생 가능성 -> 데이터 품질 저하
2. 불필요한 인덱스 생성 -> 저장공간 낭비 및 DML 성능 저하
** 인덱스는 원래 조회 성능을 향상시키기 위한 객체이며, 인덱스는 DML(INSERT/UPDATE/DELETE)시 INDEX SPLIT 현상으로 인해 성능이 저하된다.
※ 출처 : 홍쌤의 데이터랩 - SQLD
'자격증 > SQLD' 카테고리의 다른 글
SQLD SQL 기본 및 활용(5~8) - 13일차 (0) | 2024.11.03 |
---|---|
SQLD SQL 기본 및 활용(1~4) - 12일차 (0) | 2024.10.25 |
SQLD 데이터 모델링의 이해(1~5) - 10일차 (0) | 2024.10.16 |
SQLD 데이터 모델링의 이해 - 9일차 (0) | 2024.10.14 |
SQLD 데이터 모델링의 이해 - 8일차 (0) | 2024.10.11 |