|
제3 정규형의 정의 |
한 필드의 값을 알았을 때 다른 필드의 값을 알아낼 수 없도록 서로 간에 독립적이어야 한다. |
지난 강좌를 통해서 하나의 필드에 하나의 최소 정보가 들어가도록 하는
제1정규화 작업과 주제 단위로 테이블을 분리함으로써 자료의 중복을
피하는 제2정규화의 과정에 대해 알아보았습니다. 이제 주제별로 분리된 테이블에서 다시 한번
필드를 점검하는 과정을 거쳐야 합니다.
제3정규화는 주제별로 독립된 테이블에서 어느 한 필드의 값을 알았을 때 다른 필드의 값을 알 수 있는 경우가 있다면 그 필드를 없애는
과정입니다. 따라서 필드를 아예 없애버리는 경우도 있고 관련된 필드들을 따로 하나의 테이블로 떼어내는 경우도 있습니다.
다른 필드(정보)에서 파생되거나 계산해서
얻어낼 수 있는 필드는 제거합니다. 그리고 대신 그 정보는 질의에서 계산필드로 만들어 얻거나 폼에서 계산 컨트롤로 얻어내게 됩니다.
계산 필드는 공간을 차지하는 자료는 아니기 때문에 크기를 줄이는 효과를 얻을 수 있지만 항상 재계산해서 값을 얻기 때문에 질의 속도에
영향을 줍니다. 반대로 계산필드로 사용하지 않고 항상 존재하는 영구 필드로 운영을 한다면 의존하고 있는 다른 필드의 값이 변하면 항상
재계산해서 해당 필드에 값을 갱신하여 주어야 하기 때문에 자료의 신뢰성을 확보하기 위해서는 프로그래머가 철저한 제어를 해주어야
합니다. 따라서 계산필드는 효율성을 따져서 운영하도록 합니다.
정규화는 제1정규화를 한 다음에 제2정규화를, 제2정규화를 한 다음에 제3정규화를 해나갑니다.
[고객정보] 테이블을 열고 제1정규화를 확인합니다.
각 필드는 최소의 정보 단위로 구성되어 있어 제 1정규화를
만족시키고 있습니다.
제2정규화를 확인합니다.
고객정보란 기능적인 주제로 테이블이 구성되어 있으며 고객번호라는 기본키에 대해 의존적이 정보로 구성되어 있습니다. [성별] 단일
필드의 정보가 반복되는 모습이 보입니다. 이 필드는 조회필드로 만들면 편리하겠습니다. 성별 필드는 남/녀 둘 중에 하나를 선택하면
되므로 조회필드를 만들되 조회 테이블까지 만들 필요는 없겠습니다.
이제 제3정규화를 확인합니다.
‘필드가 서로 독립적이어야 한다. 그리고 계산으로 그 값을 알아낼 수 없어야 한다.’ 라는 조건을 확인합니다.
주민등록번호를 알면 생년월일, 성별, 그리고 나이까지 계산해 낼 수 있습니다.
따라서 주민등록번호가 필요한 경우에는 특별한 경우를 제외하고 생년월일, 성별 그리고 나이 필드는 없애도 됩니다. 또는 주민등록번호가
필요 없다면 생년월일과 성별필드를 남기고 생년월일에서 계산해 낼 수 있는 나이와 주민등록번호를 없앱니다. 나이의 경우 한 시점의 나이가
필요한 경우가 아니라면 생년월일로 정보를 저장하여 필요할 때 재계산을 하도록 하는 것이 좋습니다.
제 3 정규화 실습
이번 예는 주민등록번호를 남기고 나머지 필드는 테이블에서 없애고 대신
질의테이블의 계산필드를 이용하여 필요한 정보를 얻어내도록 하겠습니다. 제3정규화를 적용한 테이블은 [고객정보_3NF] 입니다.
빈 질의테이블을
만들고 디자인 보기에서 SQL창 보기로 전환하여 SQL 입력창을 열고 아래의 질의문을 복사해 넣습니다.
푸른색의 글씨가 계산필드 입니다.
SELECT 고객번호, 이름, 주민등록번호, 전화, Format(Left([주민등록번호],2) & "-" & Mid([주민등록번호],3,2) & "-" & Mid([주민등록번호],5,2),"yyyy-mm-dd") AS 생일, Right(Year(Date()-CDate([생일])),2) AS 나이, IIf(Mid([주민등록번호],7,1)="1","남","여") AS 성별 FROM 고잭정보_3F; |
다시 디자인 보기로 전환하여 질의디자인 창에서 계산필드를 확인합니다. 계산필드를 작성/확인할 때는 계산필드를 클릭하여 커서를 위치시킨 다음 [Shift-F2] 키를 누르면 확대/축소 창을 열고 이 창에서 계산식을 작성하는 것이 편리합니다.
위 그림에서 제3정규화 전인 첫번째 테이블을 제3 정규화한 후 두번째 테이블을 기반으로 질의테이블을 만들고 계산필드를 추가하면 첫번째
질의테이블의 내용과 동일한 결과를 보입니다.
참고> 계산필드/계산컨트롤
파일메이커프로나 어프로치에서는 테이블에 계산필드 형식을 지원합니다.
그러나 액세스는 테이블의 필드형식에서 계산필드 형식을 지원하지 않고 질의테이블에서 계산필드를 사용할 수 있습니다. 질의테이블의
계산필드와 같은 기능을 하는 것을 폼에서는 계산컨트롤이라고 합니다.
계산 필드는 질의테이블을 디자인보기로 열고 그리드의 필드에 다음과
같이 직접 입력하여 만듭니다.
폼에서는 계산컨트롤이라고 말합니다. 폼을 디자인보기로 열고 텍스트 입력란을 폼에 추가한 후 컨트롤 원본 속성에 등호(=)을 앞에 쓰고 나머지 계산식을 만들어 주면 됩니다
정규화 요약
지금까지 정규화의 기본적인 과정을 말씀드렸습니다. 1,2,3 정규화를 하고 나서도 좀 더 정규화를 진행해야 하는 부분이 있지만 대개
1,2,3 정규화만으로도 충분합니다. 1,2,3 정규화로 구분하여 얘기하면 웬지 거추장스러운 감이 없잖아 있습니다. 따라서 지금까지의
내용을 다음과 같이 간단히 정리하였습니다.
테이블을 디자인할 때 꼭 생각하여야 할 내용입니다.
1) 레코드는 고유하게 구별되어야 한다.
2) 필드는 고유하고 최소한의 정보만 가지도록 구성한다.
3) 한 테이블에는 하나의 주제로 기능적 단위로 구성한다.
4) 필드는 서로 독립적이어야 한다.
5) 다른 필드의 정보를 가지고 계산하여 알 수 있는 필드는 없어야 한다.
다음 강좌는 조건식 작성에 관한 내용을 먼저 공부하고 계속해서 필드의 유효성 검사 규칙 속성 이용에 대한 것을 알아 보도록
하겠습니다.