요새 마스크를 쓰고 수업을 진행하다 보니 처음 듣는 단어에 대해 확실성이 떨어진다ㅋㅋㅋㅋ
PPT 보여주기 전에 정규화를 얘기해주시는데 정교화인지 정규화인지 진짜 많이 헷갈렸네
** 정규화는 중복 값이 한 테이블에 같이 존재하는 예상 하에 시작한다. **
1. 정규화 (normalization)
정규화는 간단히 이상 현상을 없애려고 하는 것, 중복된 데이터를 제거하는 것
데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위해 테이블을 분해하는 과정
관련 있는 속성으로만 구성해야 함 - 함수적 종속성을 판단하여 정규화를 수행한다.
2. 이상 현상 (anomaly)
불 필요한 데이터의 중복으로 릴레이션에 발생하는 부작용
① 삽입 이상 : 릴레이션에 새 데이터를 삽입할 때 불필요한 데이터도 삽입해야 하는 문제
- 필요치 않게 쌓이다가 중복이 발생할 수 있음
② 갱신 이상 : 릴레이션의 중복된 튜플 중에 일부분만 수정하여 데이터가 불일치 해지는 문제
- 결국 그에 맞는 식별자로 데이터를 찾을 수 없는 경우가 발생
③ 삭제 이상 : 릴레이션에서 튜플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제
3. 함수적 종속성 (Functional Dependency)
속성들 간의 관련성
① X가 Y를 함수적으로 결정한다.
릴레이션 내의 모든 튜플을 대상으로 하나의 X값에 대한 Y값이 항상 하나
② 함수 종속 관계 판단
기본키로 판단하여 select라고 생각하면 된다.
· 고객 아이디가 고객 이름, 등급을 select 할 수 있다. ☞☞☞☞☞ 고객 아이디 : X , 고객 이름, 등급 : Y
· 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 한다. ☞ 명확한 기준이 있는 것이 아니기 때문에 기준을 · 판단할 수 있는 사고가 필요하다. think ^-<
· 속성 값은 계속 변할 수 있기 때문에 현재 릴레이션에 포함된 속성 값만으로 판단하면 NoNo
· 일반적으로 기본키와 후보 키가 릴레이션의 다른 모든 속성들을 함수적으로 결정함
· 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있다.
③ 완전 함수 종속
일반적으로 함수 종속은 완전 함수 종속을 의미한다.
릴레이션에서 Y 가 X에 함수적으로 종속되어 있지만 X의 전체가 아닌 일부분에는 종속되지 않음
④ 부분 함수 종속
릴레이션에서 Y가 X의 전체가 아닌 일부분에도 함수적으로 종속된다.}
부분 함수 종속이라면 분리될 수 있다.
⑤ 식별자는 식별자 제외 나머지 속성들만 고려한다.
⑥ 무손실
의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보 손실이 일어나면 안 됨
분해된 릴레이션을 자연 조인하면 분해 전의 릴레이션으로 복원이 가능해야 한다.
식별이 불가능하면 테이블을 분리해야 한다.
** 정규화는 중복을 제거하는 것이지 종속을 제거하는 것이 아니다 **
4. 정규형 (Normal Form)
릴레이션이 정규화된 정도
각 정규형 마다 제약조건이 존재해서 릴레이션 특성을 고려하여 적합한 정규형을 선택해야 한다.
보통 3 정규화까지 하고 좀 빡세면 BCNF
정규형이 너무 많으면 그만큼 제약 조건이 많아져서 조인을 많이 해야 하고 그에 따른 정보처리 속도가 떨어짐
1] 제 1정규형 (1NF)
① 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값을 가지면 제 1정규형 - 따라서 애초에 원자값으로 릴레이션 속성을 만들었더면 제 1정규형 끝!
② 제 1정규형을 만족해야 관계 데이터베이스 릴레이션이다.
③ 제 1정규형에 이상 현상이 발생하는 이유 : 완전 함수 종속이 아니라 부분 함수 종속이 존재하기 때문이다.
④ 문제 해결 방법 : 부분 함수 종속이 제거되도록 릴레이션 분해 → 분해된 릴레이션은 제 2정규형에 속하게 된다.
2] 제 2정규형 (2NF)
① 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이 되면 제 2정규형 - 복합 키가 존재할 때 신경 많이 써야 한다. /*요고요고 기사시험에 나온다고 함 */
② 제 2정규화에 이상 현상이 발생하는 이유 : 이행적 함수 종속이 존재하기 때문이다.
** 이행적 함수란 X → Y, Y→ Z라면 X→ Z가 성립 ; Z가 X에 이행적으로 함수 종속된다. **
③ 문제 해결 방법 : 이행적 함수 종속이 제거되도록 릴레이션 분해 → 분해된 릴레이션은 제 3 정규형에 속하게 된다.
3] 제 3정규형 (3NF)
① 릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 키본키에 이행적 함수가 종속되지 않으면 제 3정규형
② 제 3정규형까지만 진행해도 이상 현상이 적음 (안 생기는 것이 아니라 적음)
③ 고객 아이디 테이블에서 외래 키 등급으로 할인율에 접근할 수 있음 → 무손실
4] 보이스/코드 정규형 (BCNF)
① 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3정규형까지 모두 만족해도 이상 현상이 발생할 수 있다.
② 제 3정규형보다 더 엄격한 제약 조건을 제시
③ 구조 모양이 제 3정규형과 비슷하지만 다름!! 헷갈리면 안 돼
5] 제 4정규형
① BCNF을 만족하면서, 함수 종속이 아니라 다치 종속을 제거하면 제 4정규형
② 그러나 나는 다치 종속이 뭔지 모르니 그냥 이런 게 있구나 하고 넘어가겠음
6] 제 5정규형
① 제 4정규형을 만족하면서 후보키를 통하지 않은 조인 종속을 제거하면 제 5정규형
5. 정규화 시 주의사항
① 모든 릴레이션이 제 5정규형에 속해야만 바람직한 것은 아니다.
② 대체적으로 제 3정규형이나 BCNF에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상현상을 해결 하는 경우가 많다.
6. 정규화와 반정규화
테이블을 통해 테이블이 엄청 많은 상태에서 빈번하게 검색하는 과정이 조인의 관계가 엄청 많으면 한 테이블에 컬럼 하나를 추가해서 데이터를 추가해서 검색하는 것 반정규화라고 한다. 물론 조인이 적기 때문에 검색 속도는 빠르지만 반정규화가 많이 일어나면 테이블 관리가 어려우니 잘 생각해서 사용해야 한다.
'Backend > DataBase' 카테고리의 다른 글
DB - VIEW (0) | 2020.04.06 |
---|---|
DB 서브쿼리 sub Query & UNION (0) | 2020.04.01 |
DataBase 데이터베이스 설계 (0) | 2020.03.25 |
DB 생성 문장 및 사용자 계정 접근 권한 부여 (0) | 2020.03.19 |
MySQL 내장함수 (0) | 2020.03.18 |
댓글