SQLD 정규화
정규화
정규화의 가장 쉬운 의미는 데이터 베이스 수행에 있어 성능 향상 전략중에 한가지이다.
데이터 중복제거와 분류를 통해서 입력/수정/삭제 성능을 향상시켜준다. 하지만 계속되는 엔터티의 생성으로 조인이 빈번하게 일어나 데이터 조회 성능은 저하 될수도 있다.
가장 이해하기 쉬운 의미..
- 1정규화 : 모든 속성은 하나의 값을 가져야 한다.(반복적이고 같은 의미를 담는 형태가 있어서는 안된다.)
- 2정규화 : 모든 속성은 기본키에 종속 되어야 한다.
- 3정규화 : 기본키가 아닌 모든 속성간에 서로를 종속 할 수 없다.
예를 들어보자…
주문 테이블 |
---|
주문번호 (PK) |
주문일자 |
품목코드 |
품목단가 |
주문수량 |
고객번호 |
고객명 |
주문이라는 테이블에 주문에 대한 모든 데이터가 들어가있다. 예를 들어 내가 옷 두개를 한번에 주문한다. 그렇다면 데이터는 다음과 같이 저장이 될것이다.
주문번호 | 주문일자 | 품목코드 | 품목단가 | 주문수량 | 고객번호 | 고객명 |
---|---|---|---|---|---|---|
1 | 10/17 | 1 | 2000 | 1 | 1 | 한주련 |
1 | 10/17 | 2 | 3000 | 1 | 1 | 한주련 |
1번이라는 주문번호로 주문한 상품의 수만큼 중복된 컬럼이 존재 하게 될것이다. 이 구조에서는 1정규화가 필요하다. 1번이라는 주문번호가 중복되지 않도록…
주문 |
---|
주문 번호 (PK) |
주문일자 |
고객번호 |
고객명 |
주문품목 |
---|
주문번호 (FK) |
품목코드 |
품목단가 |
주문수량 |
1차 정규화의 결과로 이제 1번이라는 하나의 기본키로 여러개의 상품을 중복없이 식별할 수 있다.
2차 정규화는 주문품목 테이블에서 필요성이 나타난다. 2차 정규화란 복합키로 구성된 (여러개의 PK) 경우 2차 정규화의 대상이 된다 이는 복합키의 일부에만 종속되는 속성이 있을 경우 이 속성을 분리해주는 것이다.
1차 정규화를 마친 주문 품목 테이블에서 품목단가라는 속성은 품목코드라는 키와만 관련이 있고 주문번호와는 관련이 없다 이때 품목단가 속성이 일부 키에만 종속되어 있으므로 해당 속성을 분리해주면 된다.
주문품목 |
---|
주문번호 (FK) |
품목코드 (FK) |
주문수량 |
품목 |
---|
품목코드 (PK) |
품목 단가 |
2차 정규화를 통해 일부의 종속성을 가진 속성을 분리 해주었다.
마지막 3차 정규화는 일반 속성인 컬럼은 기본키에 의존해야 하는데 일반 속성에 의존하고 있는 속성들을 분리하는 것이다.
주문테이블을 살펴보면 고객명이라는 속성은 기본키인 주문 번호에 종속성을 가지고 있지 않고 고객번호 속성에 종속성을 가지고 있는 상태이다. 따라서 3차 정규화의 대상이 된다.
주문 |
---|
주문번호 (PK) |
주문일자 |
고객번호 (FK) |
화원 |
---|
회원번호 (PK) |
고객명 |
솔직히 그동안 데이터베이스 설계하면서 정규화에대한 개념을 모르고 한번에 이과정을 수행했는데 그럼 된거 아닌가 싶지만… 시험을 보기위해서 과정을 나열하다보니 내가 해온 과정과 비슷하지만 다른.. 어떤 그런 어려운 느낌…