공부기록
정규화 본문
- 정규화
- 함수적 종속성등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
- 정규화의 목적
- 데이터의 중복성을 최소화하고 일관성등을 보장하여 데이터베이스의 품질을 보장하고 성능 향상을 위해 수행한다.
- 이상(anomaly)의 개념 및 종류
- 정규화를 거치지 않으면 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작시 예기치 못한 곤란한 형상들이 발생한다. 이를 이상이라고 하며 삽입이상, 삭제이상, 갱신이상이 있다.
- 삽입이상
- 릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않는 값들도 함께 삽입되는 현상이다.
- 삭제이상
- 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄가 일어나는 현상이다.
- 갱신 이상
- 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상이다.
- 함수적 종속
- 함수적 종속은 데이터들이 어떤 기준 값에 의해 종속되는 것을 의미한다.
- <수강> 릴레이션이 (학번, 이름, 과목명)으로 되어 있을떄, 학번이 결정되면 과목명에 상관없이 학번에는 항상 같은 이름이 대응된다. 학번에 따라 이름이 결정될 때 이름을 학번에 함수종속적이라고 한다. 이는 "학번 → 이름" 으로 나타낸다.
- a → b 일 때 역은 성립하지 않는다.
- a는 결정자이며 속성간의 종속성을 규명할 때 기준이 되는 값이고 , b는 종속자이며 결정자의 값에 의해 정해지는 값을 의미한다.
- 부분 / 이행 / 완전 함수적 종속
- 어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이면서 속성 집합 B의 어떠한 진 부분 집합에도 함수적 종속일 때, 속성 A는 속성집합 B에 부분 함수적 종속이라고 한다
- 어떤 테이블 R에서 속성 A가 다른 속성 B 전체에 대해 함수적 종속이지만 속성 집합 B의 어떠한 진부분집합 C에는 함수적 종속이 아닐때 속성 A는 속성집합 B에 대해 완전 함수적 종속이라고 합니다.
- 이행적 종속
- A → B이고, B → C 일때, A → C이면 이행적 종속이라고 한다.
- 정규화의 원칙
- 정보의 무손실 표현, 하나의 스키마를 다른 스키마로 변화할 때 정보의 손실이 있어서는 안된다.
- 분리의 원칙, 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜야 한다.
- 데이터의 중복성이 감소되어야 한다.
- 제 1정규형
- 데이터 모델이 속성 값으로 원자값만을 허용
- 도메인의 값이 원자값이면 관계형 스키마는 제 1 정규형이다.
- 제 2정규형
- 1정규형중에 후보키에 비주요 속성들이 완전 종속적이어야 한다.
- 즉 부분적 함수 종속성을 제거해야 한다.
- -
- 위의 예시에서 city, status는 비주요 속성이면서 S#에 의해 결정되는 부분적 함수 종속성을 보인다.
- S# P# → Qty , #S → City Status로 분리하면 완전 함수적 종속을 보이게 된다.
- 제 3 정규형
- 제 2 정규형에서 비주요 속성이 모든 후보키에 이행적으로 의존적이 아니면 제 3 정규형이다.
- a → b에서 a가 슈퍼키이거나, b가 주요속성이어야 한다.
- 즉 이행적 함수 종속성을 제거한다.
- -
- S# → City Status에서 S# → City이고 City → Staus이므로 이행적 함수 종속이다
- 따라서 S# → City, City → Status로 분해한다.
- BCNF 정규형
- a → b에서 a가 슈퍼키이면 BCNF 정규형이된다.
- 제 3정규형에서 a가 슈퍼키가 아니고 b가 주요속성인 조건을 삭제한 것이 bcnf이다.
- -
- title year → studioname이고 studioname → studioaddr이므로 위 관계는 3정규형이 아니다. 부분적 함수 종속성은 없으니 제 2 정규형이다.
- 두 함수 종속성으로 테이블을 둘로 나누면 bcnf 정규형이다.
'CS > DB' 카테고리의 다른 글
ORM (0) | 2021.05.17 |
---|---|
SQL DB VS NOSQL DB (0) | 2021.05.15 |
개체-관계 데이터 모델링 (0) | 2021.05.01 |
권한 (0) | 2021.05.01 |
무결성 (0) | 2021.05.01 |