참고한 책: 면접을 위한 CS 전공지식 노트 (http://www.yes24.com/Product/Goods/108887922)
4. 데이터베이스
4.2. ERD와 정규화 과정
4.2.1. ERD의 중요성
4.2.2. 예제로 배우는 ERD
4.2.3. 정규화 과정
p. 198
4.2 ERD와 정규화 과정
ERD(Entity Relationship Diagram)
데이터 베이스를 구축할 때 가장 기초적인 뼈대 역할.
릴레이션 간의 관계들을 정의한 것.
4.2.1 ERD의 중요성
ERD는 시스템의 요구사항을 기반으로 작성되며 ERD를 기반으로 데이터베이스를 구축.
데이터베이스 구축 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 함.
관계형 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없음.
비정형 데이터
비구조화 데이터. 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보
+정해진 규칙이 없어서 값의 의미를 쉽게 파악하기 힘든 경우
예)텍스트, 오디오, 비디오, 동영상 등
관계형 구조????
p.199
4.2.2 예제로 배우는 ERD
승원 영업부서의 ERD
요구사항
- 영업사원은 0~n 명의 고객을 관리
- 고객은 0~n 개의 주문을 넣을 수 있다.
- 주문에는 1~n개의 상품이 들어간다.
무무오브레전드의 ERD
요구사항
- 선수들은 1명의 챔피언을 고를 수 있음.
- 챔피언은 한 개 이상의 스킬을 가짐
- 스킬은 한 개 이상의 특성을 가짐.
p. 200
4.2.3 정규화 과정
릴레이션 간 잘못된 종속 관계로 데이터베이스 이상 현상이 일어나 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러개로 분리하는 과정
+ 이상 현상을 저장하기 위해서 릴레이션을 의미 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정. 함수적 종소성을 판단하여 정규화 진행
+이상 현상: 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할 때 발생할 수 있는 부작용.
+이상 현상의 종류
- 삽입 이상: 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상: 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 문제
- 삭제 이상: 튜플을 삭제하면 꼭 필요한 데이터까지 삭제되는 데이터 손실 문제
(출처: https://zz132456zz.tistory.com/36 )
정규화 과정은 정규형 원칙을 기반으로 정규형을 만들어가는 과정.
정규형(NF, Normal Form): 릴레이션이 정규화된 정도
+각 정규형마다 제약 조건이 존재
- 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
- 정규형의 차수가 높아질수록 데이터 중복이 줄어 이상 현상이 발생하지 않는 바람직한 릴레이션이 됨.
+릴레이션의 특성을 고려하여 적합한 정규형을 선택한다.
+정규화 과정: 비정규형 릴레이션 -> 제1 정규형 -> 제2 정규형 -> 제3 정규형 -> BCNF형 -> 제4 정규형 -> 제5 정규형
정규형 원칙
같은 의미를 표현하는 릴리에션이지만 더 좋은 구조로 만들어야 하고,
자료의 중복성은 감소해야 하고,
독립적인 관계는 별개의 릴레이션으로 표현해야 하며,
각각의 릴레이션은 독립적인 표현이 가능해야 한다.
제1정규형
릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 함.
릴레이션의 속성 값 중에서 한개의 기본키에 대해 두 개 이상의 값을 가지는 반복집합이 있으면 안됨. 제거 대상.
릴레이션의 한 행에서 강의, 성취도의 속성 값이 각각 2개 이상이면 한 행에서 강의, 성취도의 속성 값이 각각 1개를 가지도록 나눠준다.
제2정규형
릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태
부분함수의 종속성 제거: 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것.
>>릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 함
&& 부분 함수의 종속성을 제거한 형태
+
함수 종속성
어떤 테이블의 속성 A와 B에 대하여, A값에 의해 B 값이 유일하게 정해지는 관계를 말함.
"B는 A에 함수 종속이다". A -> B
완전 함수 종속: 기본키를 구성하는 모든 속성에 종속되는 경우
> 기본키를 구성하는 속성이 ㄱ,ㄴ 이 있다고 하자. ㄱ과ㄴ을 모두 알아야 ㄷ을 식별할 수 있을 때 기본키에 ㄷ은 완전 함수 종속된 관계라고 부른다.
부분 함수 종속: 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
>기본키를 구성하는 속성이 ㄱ,ㄴ 이 있다고 하자. ㄱ 또는 ㄴ 하나만 알아도 ㄷ을 식별할 수 있을 때 기본키에 ㄷ은 부분 함수 종속된 관계라고 부른다.
이행적 함수 종속: A, B, C 세 속성이 있고, A -> B, B -> C 종속 관계가 있을 때, A -> C가 성립하는 경우
>ㄱ을 알면 ㄴ을 알고 있고, ㄴ을 알고 있으면 ㄷ을 알 수 있다. ㄱ을 알면 ㄷ을 알 수 있을 때.
(출처: https://rebro.kr/159 )
(출처: https://dodo000.tistory.com/20)
주의할점
릴레이션을 분해할 때 동등한 릴레이션으로 분해해야하고, 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 함.
+
무손실 분해(Lossless decomposition)
분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전하게 얻을 수 있다.
정보의 손실은 원래의 릴레이션을 분해한 후에 생성된 릴레이션들으 조인한 결과에 들어 있는 정보가 원래의 릴레이션에 들어있는 정보보다 적거나 많은 것을 모두 포함.
(출처: https://gamedoridori.tistory.com/165 )
제3정규형
제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태
>>릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 함
&& 부분 함수의 종속성을 제거한 형태
&& 이행적 함수 종속을 만족하지 않는 상태
보이스/코드 정규형(BCNF)
제3정규형이고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.
>>릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값(atomic value)만으로 구성되어야 함
&& 부분 함수의 종속성을 제거한 형태
&& 이행적 함수 종속을 만족하지 않는 상태
&&결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.
결정자
함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소.
'X' -> 'Y'일 때, X는 결정자, Y는 종속자.
결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.
>>
결정자-> 종속자 인 함수 종속 관계가 있다.
그런데 그 결정자가 후보키가 아니다.
함수 종속 관계를 제거한다.
함수 종속 관계를 제거한 후 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.
정규화 과정으로 테이블을 나눈다고 무조건 성능이 좋아지는 건 아님.
서비스에 따라 정규화 또는 비정규화 과정을 진행해야함.
+비정규화(Denormalization, 반정규화)
하나 이상의 테이블에 데이터를 중복 배치하는 최적화 기법.
어느 정도의 데이터 중복이나 그로 인해 발생하는 데이터 갱신 비용은 감수하는 대신 조인 횟수를 줄여 한층 효율적인 쿼리를 날릴 수 있도록 한다.
(출처: https://owlyr.tistory.com/20 )
'CS 스터디' 카테고리의 다른 글
4.4 데이터 베이스의 종류 (0) | 2023.06.21 |
---|---|
4.3 트랜잭션과 무결성 (0) | 2023.06.21 |
4.1 데이터베이스의 기본 (0) | 2023.06.16 |
3.4 CPU 스케줄링 알고리즘 (0) | 2023.06.14 |
3.3 프로세스와 스레드 (1) | 2023.06.12 |