Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 검색어 추천
- 쿠키
- 카카오
- 코드 계약
- docker
- jwt 표준
- 깊게 생각해보기
- 알람 시스템
- 누적합
- 숫자 블록
- 백준
- 트랜잭샨
- gRPC
- piplining
- BFS
- 결제서비스
- AWS
- 프로그래머스
- 객체지향패러다임
- 구현
- 디버깅
- 이분탐색
- 완전탐색
- 좋은 코드 나쁜 코드
- branch 전략
- spring event
- 레디스 동시성
- 수신자 대상 다르게
- prg 패턴
- 셀러리
Archives
- Today
- Total
코딩관계론
[Database] 정규화(Normalization)이란? 본문
반응형
[ 정규화(Normalization) 수행 이유]
- 정규화는 데이터의 일관성 최소한의 데이터 중복, 최소한의 데이터 유연성을 위해 데이터를 분해하는 과정이다
- 중복된 데이터를 허용하지 않음으로써 데이터의 무결성을 유지할 수 있다.
[ 1 정규화 ]
모든 속성은 단 하나의 값을 가져야 한다.
아래의 표를 보면 연락처 속성에 휴대폰과 집전화가 혼합되서 들어있는 것을 볼 수 있다. -> 단 하나의 의미를 가지는 것이 아님
[이와 같이 테입을을 구성한다면 몇 가지 단점이 존재한다]
- 연락처 정보에 든 값이 휴대폰인지, 집 전화인지 구별이 불가능하다.
- 명확하지 않은 속성은 이메일처럼 다른 유형의 데이터를 포함할 수 있다.
고객번호 | 고객명 | 연락처 |
1000 | 배재완 | 010-7123-1234, 02-123-123 |
1001 | 이영빈 | 010-4655-6777 |
1002 | 김선영 | 010-1244-1233 |
[따라서 위의 테이블은 아래와 같이 두 가지로 분리해야함.]
- 두 개의 테이블로 분리하면서 전화번호의 타입에 따라(휴대폰, 집전화) 전화 타입을 구별할 수 있도록 함
- 속성이 명확함으로 다른 유형의 데이터를 쓸 일이 적어짐
[고객]
고객번호 | 고객명 |
1000 | 배재완 |
1001 | 이영빈 |
1002 | 김선영 |
[고객 연락처]
고객번호 | 전화 타입 | 연락처 |
1000 | 1 | 010-7123-1234 |
1001 | 2 | 010-4655-6777 |
1002 | 1 | 010-1244-1233 |
1000 | 2 | 02-123-123 |
[ 2 정규화 ]
엔터티의 일반속성은 주식별자 전체에 종속적이어야 한다. 복합키 일 때만 존재함
아래의 주문 상세 테이블을 보면 상품 번호는 고객이 주문할 때 발생하는 매핑 정보로서의 의미를 가지고 있다. 하지만 상품명을 보면 고객의 주문이랑 상관 없이 상품 번호에 종속적이다. 이러한 현상을 함수종속성이라고 한다
주문번호(주식별자) | 상품번호(주식별자) | 상품명(일반속성) |
1000 | 123 | sql 책 |
1001 | 123 | sql 책 |
1002 | 1545 | 인간관계론 |
1000 | 244 | 하버드 글쓰기 |
[ 함수종속성이란]
데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭한다. 이떄 기준 값을 결정자라 하고, 종속되는 값을 종속자라고 한다.
[이와 같이 테입을을 구성한다면 몇 가지 단점이 존재한다]
- 상품명이 변경됐을 경우 주문 상세 테이블의 상품명 또한 변경해야 한다.
- 데이터의 중복은 성능과 정합성에 문제를 발생시킨다.
따라서 아래처럼 테이블을 분리하여 함수종속성을 해결한다.
주문번호(주식별자) | 상품번호(주식별자) |
1000 | 123 |
1001 | 123 |
1002 | 1545 |
1000 | 244 |
상품번호(주식별자) | 상품명(일반속성) |
123 | sql 책 |
1545 | 인간관계론 |
244 | 하버드 글쓰기 |
[ 3 정규화 ]
엔터티의 일반속성 간에는 서로 종속적이지 않다. 즉 이행종속적이지 않다
2종규화랑 차이점은 2형은 주식별자 전체에 일반 속성이 종속되어야 한다(ex,위의 키에는 주문번호와 상품번호가 키로 있지만 상품명은 상품번호에만 의존함)
[ 이행종속적이란]
기본 속성이 주 식별자가 아닌 다른 식별자에 의해 종속되는 것을 이행종속이라고 한다.
아래와 같이 주문테이블이 있다면 주문번호는 -> 고객번호이고 고객번호는 -> 고객 이름이다 이러한 형태를 이행 종속이라고 부른다
주문번호(주식별자) | 고객번호 | 고객 이름 |
1000 | 123 | 배재완 |
1001 | 213 | 김선영 |
1002 | 1545 | 티모 |
1000 | 244 | 모티 |
[이와 같이 테이블을 구성한다면 몇 가지 단점이 존재한다]
- 삽입 이상: 새로운 고객 번호와 이름을 추가하고 싶은데 주문번호가 없어서 추가하지 못하는 현상이 발생(무결성 위반)
- 수정 이상: 고객 이름이 변경될 경우 모든 데이터에 대해서 일괄적으로 변경해야한다.
- 삭제 이상:주문 번호만 삭제하고 싶은데 고객 번호와 고객 이름까지 삭제되는 현상이 발생한다.
주문번호(주식별자) | 고객번호 |
1000 | 123 |
1001 | 213 |
1002 | 1545 |
1000 | 244 |
고객번호(주식별자) | 고객 이름 |
123 | 배재완 |
213 | 김선영 |
1545 | 티모 |
244 | 모티 |
[ BCNF]
모든 결정자가 후보키(유일, 최소)여야 한다.
학번 | 과목 | 교수 |
6014 | 데이터 베이스 | 브라운 |
5813 | 데이터 베이스 | 브라운 |
4831 | 데이터 베이스 | 블랙 |
1231 | 정보 보안 | 레드 |
(학번, 과목) 조합은 교수를 결정할 수도 있지만, 교수가 하나의 과목만을 가르친다고 생각했을 때는
교수가 과목을 결정할 수 있다. 따라서 아래와 같이 분리가 필요하다.
학번 | 과목 |
6014 | 데이터 베이스 |
5813 | 데이터 베이스 |
4831 | 데이터 베이스 |
1231 | 정보 보안 |
과목 | 교수 |
데이터 베이스 | 브라운 |
데이터 베이스 | 브라운 |
데이터 베이스 | 블랙 |
정보 보안 | 레드 |
반응형
'DB > SQLD' 카테고리의 다른 글
sqld 합격 (0) | 2023.04.14 |
---|---|
데이터 모델링의 이해 (0) | 2023.03.14 |
SQL의 종류 (0) | 2023.03.12 |
Join (0) | 2023.01.25 |
[Database] 엔터티(Entity)와 속성(Attribute) (0) | 2022.10.20 |