일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스프링데이터흐름
- javaservlet
- calendar
- 제네릭
- joinfetch
- javascriptcalendar
- jQuery값전송
- 페이징
- fullcalendar
- values()
- springflow
- 제너릭
- JQuery
- paging
- JPQL
- jQueryUI
- fetchjoin
- jscalendar
- JPA
- 엔티티직접사용
- jQuery값전달
- 페치조인
- Hibernate
- 벌크연산
- 프로젝트생성
- namedQuery
- LIST
- 대량쿼리
- 자바서블릿
- Generic
- Today
- Total
가자공부하러!
데이터베이스(6) - 정규화(이상, 함수적 종속, 정규화) 본문
* 함수적 종속
: A가 B의 결정자이면, B는 A에 함수적 종속이다.
** 완전 함수적 종속
: 결정자의 부분집합에는 종속되지 않는 경우
1. 정규화 - 이상(Anomaly)
1. 이상의 개념
> 이상(Anomaly)이란?
- 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상을 의미
> 이상의 종류 : 삽입 이상, 삭제 이상, 갱신 이상
> 예시 테이블
2. 삽입 이상(Insertion Anomaly)
> 삽입 이상은 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들 때문에 삽입할 수 없게 되는 현상
> 예시
- <수강>테이블에서 학번이 "600"인 학생의 학년이 "2"라는 사실만을 삽입하고자 하는 경우
ㄴ 삽입 이상 발생
ㄴ <수강>테이블의 기본키는 학번과 과목번호이기 때문에 반드시 과목번호가 있어야 한다. 즉, 데이터가 발생되는 시점에는 과목번호가 필요 없지만 <수강>테이블에 기록하고자 하는 시점에 과목번호가 없으므로 등록할 수 없는 경우가 발생한다.
3. 삭제 이상(Deletion Anomaly)
> 삭제 이상은 테이블에서 한 튜플을 삭제할 때 연쇄 삭제가 발생하는 현상이다.
- 의도와는 상관없는 값들도 함께 삭제되는 연쇄삭제 발생
> 예시
-<수강>테이블에서 학번이 "200"인 학생이 과목번호 "C123"의 등록을 취소하고자 하는 경우
ㄴ 삭제 이상 발생
ㄴ 학번이 "200"인 학생의 과목번호가 "C123"인 과목을 취소하고자 그 학생의 튜플을 삭제하면, 학년 정보까지 같이 삭제된다. 과목만을 취소하고자 했지만 유지되어야 할 학년 정보까지 삭제되기 때문에 정보 손실이 발생한다.
4. 갱신 이상(Update Anomaly)
> 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 현상
> 예시
-<수강>테이블에서 학번이 "400"인 학생의 학년을 "4"에서 "3"으로 변경하고자 하는 경우
ㄴ 갱신 이상 발생
ㄴ 학번이 "400"인 모든 튜플의 학년 값을 갱신해야 하는데 실수로 일부 튜플만 갱신하게 되면 학번 "400"인 학생의 학년은 "3"과 "4", 즉 2가지 값을 가지게 되어 정보에 불일치성이 생기게 된다.
2. 정규화 - 함수적 종속
1. 함수적 종속(Functional Dependency)의 개념
> 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이라 하자?
- 속성 X의 값 각각에 대해 시간에 관계 없이 항상 속성 Y의 값이 오직 하나만 연관되어 있을 때,
ㄴ Y는 X에 함수적 종속이다
ㄴ X가 Y를 함수적으로 결정한다
ㄴ X → Y
> 함수적 종속은 데이터의 의미를 표현하는 것으로, 현실 세계를 표현하는 제약 조건이 되는 동시에 DB에서 항상 유지되어야 할 조건이다.
> 예시테이블
> <학생> 테이블에서 이름, 학년, 학과는 각각 학번 속성에 함수적 종속이다.
- 표기방법1 : 학번 → 이름, 학번 → 학년, 학번 → 학과
- 표기방법2 : 학번 → 이름, 학년, 학과
> X → Y의 관계를 갖는 속성 X와 Y에서 X를 결정자(Determinant)라 하고 Y를 종속자(Dependent)라고 한다.
- 예) 학번 → 이름 에서는 학번이 결정자이고 이름이 종속자이다.
* 종속이라는게 이해가 안되는데요...
- 속성에 함수적 종속적이다 == 결정자가 결정되면 종속자는 항상 결정자에 의존적이다
- 뭔말이여..
- 얘를 쟤값으로 구분할 수 있으면 쟤는 결정자 얘는 종속자 뭐 이런..?
2. 함수적 종속 다이어그램
> 한 테이블에 존재하는 속성들 간의 복잡한 함수적 종속 관계를 보기 쉽게 표현한 그림
> 예시테이블
> <수강> 테이블에서 존재하는 함수적 종속은?
- 학번, 과목번호 → 성적
- 학번 → 학년
> 함수적 종속 다이어그램으로 표현하면?
- 성적은 (학번, 과목번호)에 완전 함수적 종속이다.
ㄴ 완전 함수적 종속(Full Functional Dependency) : 어떤 테이블R에서 속성Y가 다른 속성 집합 X 전체에 대해 함수적 종속이면서 속성 집합 X의 어떠한 진부분 집합 Z에도 함수적 종속이 아닐 때, 속성 Y는 속성집합 X에 대해 완전 함수적 종속이라 한다.
ㄴ 얘만 함수적종속 다른애는 함수적 종속X
ㄴ 성적은 학번과 과목번호에 의해서만 결정되므로 성적은 (학번, 과목번호)에 완전 함수적 종속
- 학년은 (학번, 과목번호)에 부분 함수적 종속이다.
ㄴ 부분 함수적 종속(Partial Functional Dependency) : 어떤 테이블 R에서 속성Y가 다른 속성 집합 X 전체에 대해 함수적 종속이면서 속성 집합 X의 진부분 집합에 대해 함수적 종속일 때, 속성 Y는 속성 집합 X에 부분 함수적 종속이라 한다.
ㄴ 학년은 과목번호와 관계 없이 학번이 같으면 항상 같은 학년값을 가지므로 학년은 부분 함수적 종속
ㄴ 기본키(학번, 과목번호)의 일부인 학번에 의해서만 학년이 결정되므로
3. 정규화
1. 정규화(Normalization)의 개념
> 정규화는 테이블의 속성들이 상호 종속적인 관계를 같는 특성을 이용하여 테이블을 무손실 분해 하는 과정
> 목적 : 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것
> 제 1정규형 부터 제 5정규형 까지 순서대로 정규화의 정도가 높아진다
2. 정규화 과정
> 예시테이블(1NF~3NF)
> 제 1정규형
- 테이블 R에 속한 모든 속성의 도메인이 원자값으로만 되어 있는 정규형
- 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형
- <주문목록>의 경우, 하나의 제품에 대해 여러 개의 주문 관련 정보가 발생하고 있으므로 제 1정규형이 아니다.
- 제 1정규형으로 정규화
- 원자값이 아니였던 (주문번호, 고객번호, 주소, 주문수량)을 원자로 분리
- 1차 정규화 과정으로 생성된 <제품주문> 테이블의 기본키는 (주문번호, 제품번호)이고, 다음과 같은 함수적 종속이 존재한다.
주문번호, 제품번호 → 고객번호, 주소, 주문수량
주문번호 → 고객번호, 주소
고객번호 → 주소
> 제 2정규형
- 특징
ㄴ 제 1정규형 조건을 만족한다. (도메인이 원자값)
ㄴ 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속이다. (부분적 함수 종속 제거)
- <제품주문>의 경우,
ㄴ 기본키 (주문번호, 제품번호)에 완전 함수적 종속이 되지 않는 속성이 존재한다
ㄴ 고객번호와 주소는 주문번호만으로도 결정될 수 있다(완전 함수적 종속 아님)
ㄴ 주문번호 A345는 2개의 동일한 고객번호 "100"과 연결된다.
ㄴ 주문수량은 기본키에 대해 완전 함수적 종속(주문번호 또는 제품번호 하나로만 구분할 수 없다)
ㄴ 제품번호 1007은 서로 다른 3개의 주문수량과 연결된다.
- 제 2정규형으로 정규화
> 제 3정규형
- 특징
ㄴ 제 1,2정규형 조건을 만족한다. (도메인이 원자값, 부분적 함수 종속 없음)
ㄴ 기본키가 아닌 모든 속성이 기본키에 대헤 이행적 함수적 종속을 만족하지 않는다
ㄴ 이행적 함수적 종속 : A → B이고, B → C일 때 A → C를 만족하는 경우
- <주문> 테이블에서 이행적 함수적 종속
ㄴ 고객번호가 주문번호에 함수적 종속이다. (주문번호 → 고객번호)
ㄴ 주소가 고객번호에 함수적 종속이다. (고객번호 → 주소)
ㄴ 주문번호가 주소에 함수적 종속이다.
- 제 3정규형으로 정규화
ㄴ 이행적 함수적 종속(주문번호 → 주소)을 제거하여 무손실 분해
> 예시 테이블(BCNF)
> BCNF
- 특징 : 모든 결정자가 후보키
ㄴ 제 3정규형에 후보키가 여러 개 존재하면서 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능
- 예시
ㄴ <수강_교수> 테이블(제 3정규형)은 함수적 종속을 만족한다.
ㄴ 함수적 종속 : (학번, 과목명) → 담당교수, (학번, 담당교수) → 과목명, 담당교수 → 과목명
ㄴ 후보키 : (학번, 과목명), (학번, 담당교수)
ㄴ 담당교수는 결정자에 포함되지만 후보키가 아니다
- 정규화
ㄴ 결정자이지만 후보키가 아닌 '담당교수'결정자와 결정자에 종속된 종속자를 새로운 테이블로 분리
4. 제 4정규형
> 테이블 R에 다중 값 종속 (A →→ B)이 존재할 경우 R으ㅢ 모든 속성이 A에 함수적 종속관계를 만족
> 다중 값 종속(MVD; Multi Valued Dependency) :
- A, B, C 세 개의 속성을 가진 테이블 R
- B값의 집합이 A값에만 종속되고 C값에는 무관한 경우
- A →→ B
5. 제 5정규형
> 테이블 R의 모든 조인 종속이 R의 후보키를 통해서만 성립
> 조인 종속(JD; Join Dependency)
- 테이블 R의 어떤 속성에 대한 부분집합 X, Y, ... 가 있을 때, 테이블 R이 자신의 프로젝션 X, Y, ... 를 모두 조인한 결과와 동일한 경우
ㄴ R은 조인 종속 JD(X, Y, ... )를 만족한다.
6. 비정규화(Denormalization, 역정규화)
> 정규화로 인해 여러 개로 분해된 릴레이션들에서 원하는 정보를 얻기 위해서는 조인을 사용하여 다시 연결해야 한다.
> 지나치게 자주 조인을 사용하면 응답속도가 떨어진다.
> 성능 향상을 위해 다시 테이블을 합치는 경우를 비정규화 또는 역정규화라고 한다.
맨 위로
'공부 > 정보처리기사(실기)' 카테고리의 다른 글
데이터베이스(8) - 기타 실무 응용(병행 제어, 보안, 튜닝, ODB, 고급DB) (0) | 2019.06.03 |
---|---|
데이터베이스(7) - 기타 실무 응용(시스템 카탈로그, 인덱스, 트랜잭션, 회복) (0) | 2019.06.01 |
데이터베이스(5) - SQL(VIEW, 내장SQL, 스토어드프로시저) (0) | 2019.05.30 |
데이터베이스(4) - SQL(JOIN, DML, DCL) (0) | 2019.05.29 |
데이터베이스(3) - SQL(DDL, SELECT) (0) | 2019.05.28 |