8강. 정규화 개념 및 제 1 정규화 #1
자료다운로드 : 정규화
예제_제1정규화.zip
자료다운로드 :
정규화
예제_제1정규화_97.zip
정규화에 대하여
지금까지 관계형 데이터베이스에 대한 많은 내용들을 얘기하였습니다. 강좌 내용이 조금이나마 도움이 되셨으면 하는 바램입니다.
지금까지 강좌를 통해 언급하였던 필드의 형식과 크기, 그리고 기본키/고유키, 키 인덱스 만들기, 주제별로 테이블 나누기 등도 자료를 정규화 하기 위한 요소들인 것입니다. 이번 강좌는 테이블을 좀더 세밀하게 튜닝하는 과정으로 기본적인 단계인 1, 2 , 3단계의 정규형 테이블을 만드는 방법에 대한 내용입니다.
지난 강좌의 관계의 정의와 이번 강좌의 정규화 작업에 대해 마스터 함으로써 여러분은 데이터베이스의 초보 수준을 벗어나 Level 2로 수준이 향상되는 겁니다. 힘들더라도 다시 한번 마음을 가다듬고 목표를 향해 나아가도록 합시다.
관계형 데이터베이스는 방대한 자료를 관리하기 위해 디자인 된 것입니다. 따라서 이러한 목적에 합당한 구조는 당연히 단일 기능을 갖는 경량의 작은 테이블일겁니다. 산업구조 및 사회가 복잡해지면서 대가족 형태에서 이동하기 쉽고 효율적인 핵가족 형태로 자연스럽게 변화되었듯이 말이죠….
정규화는 한마디로 '자료가 중복되는 것을 없앰으로써 크기를 줄이고 자료입력과 수정 등 자료관리의 무결성을 유지하고 자료검색과 추출의 효율성을 추구하기 위한 것'이라고 말할 수 있습니다. 이때 가장 중요한 키워드는 '중복' 그리고 '최소'입니다.
중복이 되지 않도록 한다는 것은?
지금까지 여러 테이블에 흩어져 있었던 공통된 자료들을 이제 한 테이블에 모아서 관리하고 필요할 때 참조한다는 것을 의미합니다. 따라서 그 정보를 복사하여 가지고 있었던 여러 테이블에서는 그 정보를 담고 있는 필드를 모두 버리고 오직 해당 정보를 가지고 있는 유일한 테이블에 연결하기 위한 정보만을 가지고 있으면 되므로 테이블은 경량이 되고 이
연결 정보를 이용하여 필요할 때 조회하여 보도록 한다는 것입니다.
정규화 한다는 것은?
결국 한 테이블이 여러 테이블로 그리고 많은 필드에서 적은 수의 필드로 구성되어 간다는 것을 의미합니다. 따라서 정규화의 단계가 진행될수록 테이블의 수는 하나씩 많아 집니다. 이렇게 정규화 된 테이블들을 '정규화' 되었다는 것을 강조하기 위해 '정규화 테이블'이라고 부르기도 합니다. '정규화 테이블' 이라는 용어는 '관계형 테이블'이란 용어와 동일한 의미로 사용합니다.
테이블 내에서 같은 정보가 중복되어 기록되어 있을 때 문제점
1> 공간의 낭비를 가져온다.
2> 자료의 오류가 발생할 가능성이 많다.
3> 자료의 수정 등 관리가 어렵다.
예를 들어 다음과 같은 매일 판매한 제품을 기록한 테이블이 있다고 합시다.
위의 예와 같이 자료를 운영하는 경우에 있어서 만약 [제품 분류]를 해산물에서 '가공식품'이라고 변경을 하였다고 했을 때 모든 테이블에서 해당 제품을 찾아 하나씩 변경해 주어야 하므로 작업이 수월하지 않을 겁니다. 뿐만 아니라 자료를 모두 변경해주었다고 생각 했는데 누락되었다거나 또는 수정하면서 오류가 있을 수도 있을 겁니다.
그러나 [제품 정보] 테이블을 따로 만들어 놓고 다른 테이블에서는 필요할 때 이 테이블에서 해당 주소지 정보를 참조만 하도록 한다면 제품과 관련된 기초 정보가 변경이 되었더라도 오직 한 장소(테이블)에서 한번만 수정해주면 모든 것이 해결되는 것입니다.
정규화의 3대 목적
1) 반복되고 낭비적인 정보 제거
2) 자료의 무결성 강화
3) 효율적인 자료관리
정규화 기본 개념
1) 레코드는 고유해야 한다(고유키를 가져야 한다).
2) 필드의 정보도 고유해야 한다(다른 필드의 내용과 중복되지 않아야 한다).
3) 테이블 내에서 같은 정보가 여러 레코드에
반복되지 않도록 한다.
- 반복되는 정보를 가진 필드가 있으면 하나의 독립된 테이블로 만들도록 고려한다
4) 테이블의 크기를 최소화 한다.
- 입력된 자료가 테이블의 주제와 관련이 없으면
주제별로 독립시켜 또 하나의 테이블을 만든다.
- 다중 필드 키를 사용해야 한다면 따로 테이블로 만들 수 있는가 분석한다.
5) 정보단위를 최소화 한다. = 정보단위를 가능하면
최소 크기로 쪼개어서(원자화) 필드의 크기를
최소화
하고 반복되는 자료의 요소는 제거한다.
정규형(normalized form)
'고유', '중복', '최소', '주제' 라는 키워드를 생각하면서……
제1 정규형 : 필드에는 최소 데이터만 입력해야만 필드 자료의 중복여부가 명확해진다.
제2 정규형 : 필드들은 기능적으로 종속관계를 가져야 한다. 따라서 기본키/고유키와 관련되지 않는 자료는 따로 분리한다.
제3 정규형 : 다른 필드(정보)에서 파생되거나
계산해서 얻어낼 수 있는 필드는 제거한다.(각 필드의 데이터를 독립적이어야 한 필드의 값을 변경했을 때 다른 필드에 영향이 미치지 않게 된다.)
데이터베이스를 만들기 전에 정보를 분석하여 정규화 테이블을 구상하지만 여기서는 이미 만들어져 있는 비정규형 테이블을 대상으로 이 테이블을 정규화 시켜가면서 반복되는 자료의 요소는 제거하기 위한 정규화 원칙을 알아보도록 하겠습니다.
예제 데이터베이스 '정규화 예제_Northwind.mdb' 파일을 이전에 만들어 두었던 DragonTutor 폴더에 넣고 실행하시고 다음 내용을 읽어나가도록 하십시오.
|