Notice
Recent Posts
Recent Comments
Link
250x250
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 엔터티
- 데이터모델링
- go best practices
- Golang
- SQLD
- concurrency
- 프로그래밍
- 자격증
- 그래프 데이터베이스
- go
- 그래프데이터베이스
- token bucket
- cypher 쿼리
- cypher
- Database
- 고루틴
- GraphDB
- arangodb
- graph
- 중심성 측정
- neo4j성능
- 커뮤니티 탐지
- apoc 라이브러리
- 정리
- Neo4j
- n8n
- cypher쿼리
- cypher팁
- basic golang
- 쿼리프로파일링
Archives
- Today
- Total
Jamie the programmer
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델과 성능 : [01] 정규화 (Normalization) 본문
IT 자격증/SQLD
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델과 성능 : [01] 정규화 (Normalization)
jamie91 2025. 3. 4. 10:01
Contents
접기
1. 정규화(Normalization)
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
- 정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다.
- 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수가 있다.
- 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로 제3정규화까지만 수행한다.
정규화를 하지 않으면 발생되는 문제
- 정규화를 수행하지 않은 것으로 부서 테이블과 직원 테이블을 하나로 합쳐 둔 것이다.
- 만약 위의 테이블에서 새로운 직우너이 추가되는 경우 부서 정보가 없으면 부서코드를 임의의 값으로 넣어야 한다.
- 즉, 불필요한 정보가 같이 추가되는 것이다.
- 또한 새로운 '총무부'가 추가되어야 할 경우 사원 정보가 없기 때문에 임의의 값으로 사원번호를 입력하거나 추가할 수 없게 된다.
- 이러한 문제를 **이상현상(Anomaly)**이라고 한다.
- 이와 같은 문제를 해결하기 위해서는 테이블을 분해해야 한다.
- 정규화된 모델은 테이블이 분해된다.
- 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 **조인(Join)**을 수행하여 하나의 합집합으로 만들 수도 있다.
- 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
2. 정규화 절차
- 제1정규화
- 속성(Attribute)의 원자성을 확보한다.
- 기본키(Primary)를 설정한다.
- 제2정규화
- 기본키가 2개 이상의 속성으로 이루어진 경우,
- 부분함수 종속성을 제거(분해)한다.
- 제3정규화
- 기본키를 제외한 칼럼 간에 종속성을 제거한다.
- 즉, 이행 함수 종속성을 제거한다.
- BCNF
- 키본키를 제외하고 후보키가 있는 경우,
- 후보키가 기본키를 종속시키면 분해한다.
- 제4정규화
- 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중 값 종속성을 제거한다.
- 제5정규화
- 조인에 의해서 종속성이 발생되는 경우 분해한다.
3. 함수적 종속성(Functional Dependency)
[1] 제1정규화
- 정규화는 함수적 종속성을 근거로 한다.
- 함수적 종속성이란 X → Y 이면 Y는 X에 함수적으로 종속한다고 말한다.
- 함수적 종속성은 X가 변화하면 Y도 변화하는지 확인한다.
- 예) 회원 ID가 변화하면 이름도 변경될 것이다.
- 이런 경우는 회원ID가 기본키가 되고, 회원 ID가 이름을 함수적으로 종속한다고 한다.
- 테이블 X가 Y의 칼럼들을 함수적으로 종속하고 있다.
- X는 계좌번호 하나만으로 유일성을 만족하지 못한다고 가정한 것이다.
- 그래서 계좌번호와 회원 ID 를 기본키로 잡은 것이다.
- 이처럼 기본키를 잡는 것이 제1정규화이다.
[2] 제2정규화
- 부분 함속 종속성이란, 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생한다.
- 기본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략한다.
- 기본키에 있는 회원 ID가 변경되면 이름이 변경된다.
- 회원 ID가 이름을 함수적으로 종속하고 있는 것이다.
- 바로 이러한 경우를 부분 함수 종속성이라고 한다.
- 부분 함수 종속성이 발생하면 분해를 해야 한다.
- 부분 함수 종속성을 제거하면 위와 같다.
- 회원이라는 새로운 테이블이 도출되고 회원 ID가 기본키가 된다.
[3] 제3정규화
- 제3정규화는 이행 함수 종속성을 제거한다.
- 이행 함수 종속성이란, 기본키를 제외하고 칼럼간에 종속성이 발생하는 것이다.
- 제3정규화는 제1정규화와 제2정규화를 수행한 다음에 해야 한다.
- 위처럼 관리점이 관리점 코드에 종속되는 것을 이행 함수 종속성이라 한다.
- 제3정규화를 수행하면 위처럼 관리점 테이블이 도출되고 관리점 코드가 기본키가 된다.
[4] BCNF(Boyce-Codd Normalization Form)
- BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.
- 위의 예처럼 기본키(학번, 과목 번호)가 교수를 함수적으로 종속하고 있다.
- 이때 교수가 후보키(최소성과 유일성을 만족)이고 교수가 과목 번호를 함수적으로 종속하는 경우 분해가 일어난다.
- 즉, 위와 같은 경우 교수 테이블을 새롭게 만들고 기본키는 교수로 하고 칼럼은 과목 번호가 된다.
- 이러한 작업을 BCNF라고 한다.
4. 정규화 예제
- 정규화 대상 테이블
[1] 제1정규화
- 속성을 보고 한 개의 속성으로 유일성을 만족할 수 있는지 확인한다.
- 제품번호는 1001, 1001 등이 한 번 이상 나오므로 중복되고, 주문번호 또한 AB345가 두번 나와서 중복된다.
- 결과적으로 한 개의 속성으로 유일성을 만족할 수 없다.
- 그러므로 2개의 조합으로 유일성을 만족할 수 있는지 확인해 보아야 한다.
- 제품번호+주문번호가 식별자가 되면 엔터티의 유일성을 만족하게 된다.
- 제1정규화는 이러한 식별자를 찾는 과정이며 여기까지 수행하면 된다.
[2] 제2정규화
- 제2정규화는 기본키가 두 개 이상인 경우 대상이 된다.
- 기본키가 제품번호+주문번호이므로 제2정규화 대상이다.
- 제2정규화는 모든 속성(제품명, 재고 수량, 수출 여부 등)이 식별자에 종속해야 하며 그렇지 않은 경우에는 분해한다.
- 확인 방법은 제1정규화와 마찬가지로 중복을 확인하는 것이다.
- 위의 경우를 보면, 1001, 모니터가 중복되는 것을 확인할 수 있다.
- 이러한 경우에는 엔터티를 분해하는 것이 제2정규화이다.
- 위의 경우도 AB345 주문번호에 중복이 발생한다.
- 이러한 경우는 분해를 해야 한다.
- 결과적으로 최종 엔터티는 다음과 같다.
- 위와 같이 3개의 엔터티가 도출된다.
728x90
반응형
'IT 자격증 > SQLD' 카테고리의 다른 글
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델링 : [06] 관계 (Entity Identifier) (0) | 2025.03.04 |
---|---|
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델링 : [05] 관계 (Relationship) (0) | 2025.02.26 |
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델링 : [04] 속성 (Attribute) (1) | 2025.02.26 |
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델링 : [03] 엔터티 (Entity) (0) | 2025.02.24 |
[SQLD 이론/IT 자격증] Part 1 - 데이터 모델링 : [02] 3층 스키마 (3-Level Schema) (0) | 2025.02.24 |