카테고리 없음

SQL 첫걸음 8장_데이터베이스 설계

haenaneah 2025. 4. 10. 15:14

35강 - 정규화

- 데이터베이스의 테이블을 규정된 올바른 형태로 변경하고 분할하는 것. (데이터베이스의 설계 단계에서 행해짐)

- 경우에 따라서 기존 시스템을 재검토할 때 정규화하는 경우도 있음.

 

 

1. 정규화

- 정규화는 단계적으로 실시. 그 첫번째 단계가 제1 정규화로, 이를 시행하면 제1 정규형 테이블을 만들 수 있음.

 

 

2. 제1 정규형

- 관계형 데이터베이스의 테이블에는 하나의 셀에 하나의 값만 저장할 수 있다는 제약이 있음.

예) 적어도 상품코드와 상품명, 개수 데이터를 담는 세 개의 열로 나누어야 함.

 

; 하나의 셀에 하나의 값만 저장할 수 있도록 하고, 반복되는 부분을 세로(행) 방향으로 늘려나가는 것이 제1정규화의 제1단계.

 

- 제1정규화에서 중복을 제거하는 테이블의 분할도 이루어짐. 

예) 한번의 주문으로 여러 개의 상품을 주문

 

- 주문번호에는 중복된 값이 존재하지 않기 때문에 기본키로 지정할 수 있음.

- 한편 주문상품 테이블에서는 주문 번호와 상품코드를 한데 묶어 기본키로 지정할 수 있음.

 

 

제2정규형

- 데이터가 중복하는 부분을 찾아내어 테이블로 분할해 나감. 

- 이때 기본키에 의해 특정되는 열과 그렇지 않은 열로 나누는 것으로 정규화가 이루어짐.

개수 열은 기본키가 결정되고 나면 특정할 수 있는 것. 한편 상품명은 주문번호와 관계없이 상품코드만으로 특정할 수 있음. 상품코드는 기본키의 일부이긴 하지만 단독으로 기본키 역할을 할 수 없음.

 

- 부분 함수종속성을 찾아내서 테이블을 분할하는 것이 제2정규화.

 

 

4. 제3정규형

- 중복하는 부분ㅇ르 찾아내어 테이블을 분할하는 수법. 

주문 테이블에서 이름을 기준으로 연락처를 특정지을 수 있음. 단, 주문 테이블의 기본키는 어디까지나 주 문번호로, 이름은 기본키와는 관계가 없음. 고객 테이블에서 이름을 기본키로 지정하면 동명이인의 경우 데이터를 제대로 저장할 수 없으므로 고객번호를 기본키로 지정하여 고객 테이블을 작성함.
테이블 간의 연계를 ER다이어그램으로 표현.

 

- 네모난 상자(엔티티)가 테이블을 의미.

- 테이블 간의 선이 연계(릴레이션십)을 의미, 1 대多, 多대 1 등과 같은 다중도로도 표시.

예) 주문 상품 테이블 쪽의 데이터에서 상품 테이블을 보면 상품 테이블의 하나의 행을 특정하는 것. (이는 상품코드가 기본키인 만큼 당연한 일)

- 그 밖에 주문상품의 상품코드에 (FK)라고 적혀 있는 것은 외부키 속성을 가진다는 의미.

 

 

5, 정규화의 목적

- 정규화에서는 중복하거나 반복되는부분을 찾아내서 테이블을 분할하고 기본키를 작성해 사용하는 것을 기본 개념으로 삼음.

; 하나의 데이터는 한 곳에 있어야 한다