배움터  
  HOME > 배움터 > 무료강좌
무료강좌
 
액세스 2000, 김규경님의 데이터베이스 기초 다지기 - 8강. 정규화 개념 및 제 1 정규화 #2, Access 2000


8강. 정규화 개념 및 제 1 정규화 #2

제 1 정규형

제1 정규형의 정의
필드에는 논리적으로 최소한의 정보만 들어있어야 한다.

필드에는 '최소한의 정보'만 들어있어야 자료의 중복성 여부가 뚜렷해지고 단위 정보의 크기가 작을수록 입력, 수정, 검색 및 추출 등에 있어서 효율적이며 통계처리가 유연해 집니다. 따라서 이러한 의미에서 필드 수는 늘어납니다.

또한 '논리적으로 최소한의 정보'라는 것은 동일한 의미의 정보를 가지고 있는 필드들을 하나의 필드로 합칠 수 있으면 합쳐야 한다는 것을 의미하며 이때 필드 수는 줄어듭니다. 대신 레코드는 늘어납니다. 레코드가 늘어난다고 심적으로 부담을 느끼시는 독자들이 있을 겁니다. 그러나 필요에 따라 필드를 늘리는 구조적인 변경은 전체적인 운영에 영향을 주기 때문에 좋지 않습니다. 따라서 레코드를 늘리는 것이 구조 변경하지 않고 효율적으로 운영하는 방법입니다. 예를 들어 세균 배양 검사를 했을 때 배양되는 다양한 균주의 종류를 처리하기 위한 경우나 설문조사용 테이블도 대표적 경우입니다. 질문1, 질문2, 질문3 …… 등으로 필드를 늘려서 사용하는 것 보다는 질문필드 하나로 만들어 운영하는 것이 좋습니다.
또 다른 예로 교과과목이 일정한 과목의 성적처리를 위해서는 국어, 수학, 과학, 같은 식으로 필드를 만들어 운영하는 것도 괜찮습니다. 그러나 대학에서 선택과목이 다양한 경우는 하나의 과목필드를 운영하는 것이 효율적이며 융통성이 많아집니다.

비정규화 테이블 정규화 테이블
학번 국어 수학 과학 사회
2001 89 87 93 89
학번 과목 점수
2001 국어 89
2001 수학 87
... ... ...

 

비정규화 테이블 정규화 테이블
설문번호 설문1 설문2 설문3 설문4
1 1 2 1 5
설문번호 설문내용 답변
1 당신이 가장 혐오하는…? 1
2 가장 좋아하는..? 2
... ... ...

다시 강조하지만 필드를 추가하는 것은 간단하지만 테이블의 구조가 변경됨으로써 코드뿐만 아니라 폼이나 보고서의 디자인이 모두 변경되어야 합니다. 그러나 레코드를 늘리는 것은 그냥 추가만 하게 되므로 과목수의 변동, 질문수의 변동, 균주 종류의 변동에 상관없다는 것을 말합니다. 

이렇게 하는 또 하나의 이유는 입력하는 자료의 많은 부분이 결국은 통계/분석에 쓰이는데 이 작업이 훨씬 수월하다는 겁니다.

제1 정규형에서 정보 단위를 세분화 하여 필드 수를 늘리는 것은 일상생활에서 많이 경험하는 것으로 초보자일지라고 조금만 신경을 쓰면 특별한 문제없이 달성할 수 있으나 논리적으로 같은 정보를 가지고 있는 필드를 하나로 합치고 그 덕분에 레코드 수가 늘어나고 또 엑셀 등 스프레드시트에서 경험했던 테이블 구조가 깨지는 것에 대해서는 많은 부담을 느끼는 것 같습니다. 

제1정규화에 대한 지금까지의 설명을 기초로 주변의 여러 정보들을 테이블로 구성해 보십시오. 이 강좌에서는 예제 파일에 있는 비정규화 테이블인 '고객정보_비정규테이블' 을 가지고 정규화 시켜가는 과정을 예로 들어 설명 하겠습니다. 

다음은 <고객정보_비정규테이블>의 내용과 구조입니다.

08-02.gif(18546바이트)

<테이블의 구조>

08-03.gif(3382바이트)

관계형 데이터베이스의 테이블을 볼 때 먼저 테이블의 주제는 무엇인가 그리고 기본키는 설정되어 있는가를 확인하십시오. 테이블의 주제는 테이블 이름에 나타납니다. 또는 테이블의 속성에 적어 둡니다. '고객정보'라는 주제에 맞도록 구성되어 있습니다. 그리고 CustomerID가 기본키 필드입니다. 

제1 정규형의 개념을 가지고 다시 봅니다. 다음과 같은 문제점이 보이는 군요.
1. 담당자 필드에는 담당자 이름과 직위가 같이 들어 있습니다. 
2. 주소필드에는 주소와 우편 번호가 들어 있습니다. 
3. 전화(팩스)필드에는 전화와 팩스 번호를 같이 입력해서 사용하는 군요. 

담당자 필드
직위와 이름이라는 두 정보가 하나의 필드에 있어 직위로 검색하거나 이름으로 검색하는 경우가 많습니다. 검색 자체는 문제가 없지만 비효율적입니다. 따라서 이름과 직위로 나누도록 합니다. 필요하면 이름과 성을 또 나눌 수도 있습니다.

전화번호 필드
일반 전화와 팩스전화 번호가 같이 들어 있는데 팩스번호만 확인하고 싶을 때 순서가 바뀌거나 둘 중에 하나가 없다면 어떤 것이 일반전화이고 어떤 것이 팩스일까요? 일단 전화번호와 팩스필드로 나누어야 할 것 같습니다. 

주소필드
지역별로 자료를 추출하거나 분석을 하고자 한다면 역시 주소도 나누어야 하겠습니다. 어느 정도 나누어 놓으면 DM 발송용 주소 딱지(레이블)를 출력할 때도 편리할 겁니다.
주소와 우편번호 2개 필드
또는 도/광역시와 나머지 주소 그리고 우편번호 3개 필드
아니면 도/광역시, 시/구/군, 나머지 주소 그리고 우편번호 4개 필드로 나눌 수 있겠습니다.

마지막으로 고객정보라는 주제에 추가할 정보는 없을까요?
회사가 커지면서 해외로 수출해야 할 경우가 사업 계획에 들어 있다면 납품해야 할 회사의 국적을 적어 둘 필드가 있어야 할 것 같군요. 

항상 테이블을 디자인 할 때는 지금 당장의 상황도 중요하지만 다가올 상황에 대한 부분도 고려를 해야 합니다. 이러한 것을 감안하여 다음과 같이 수정하는 것이 바람직합니다.

08-04.gif(6107바이트)

제1 정규형의 테이블은 다음과 같이 보일 겁니다. 예제 파일의 [고객정보_정규화] 테이블을 열고 확인하십시오.

08-05.gif(26722바이트)

[참고] 필드의 이름
필드 이름은 가능하면 공백 없이 영문으로, 그리고 단어 단위로 구분해서 단어의 첫글자는 대문자로 시작되도록 이름을 짓고 대신 데이터시트 보기로 보았을 때 각 열의 제목을 이해가 쉽도록 표시하기 위해 Caption(제목) 속성에 설명적인 제목을 설정하는 것이 좋습니다.
실력이 늘어 나중에 VBA로 코딩을 하는 경우 공백이 있다거나 한글과 영어가 섞여 있으면 상당히 불편하는 것을 느끼게 될 겁니다.

논리적으로 최소한의 정보….
필드에는 논리적으로 최소한의 정보만 들어가도록 한다는 것이 또 제1 정규형 테이블의 조건입니다. 이런 의미에서 전화와 팩스 필드를 한번 더 생각해 봅시다. 
전화와 팩스를 하나의 필드에 사용하고 있어서 이것을 두 개의 필드로 나누었지만 전화와 팩스라는 두 필드는 개념적으로 동일한 정보로 볼 수 있고 경우에 따라서는 정규화된 하나의 필드로 운영할 수 있습니다. 

그러나 이 예에서는 적절하지 못합니다. 왜냐면 이전에 언급한 설문조사나 균주배양의 경우와는 달리 이 경우는 주 연락전화 하나 팩스 하나면 충분하여 두 개의 필드를 고정적으로 운영을 하는 것이 간단명료하기 때문입니다. 논리적으로 동일한 필드에 대해서는 설문조사를 예로 다음 강좌에서 설명하고자 합니다.

다음 강좌에서는 비정규테이블을 정규화 하는 방법을 따라 해 보실 수 있습니다. 질의를 이용하여 정보를 최소 단위로 쪼개는 방법 논리적으로 동일한 필드를 하나의 필드로 변환하는 방법에 대한 내용입니다. 기존에 있는 비정규테이블의 자료를 정규화 하는 것은 질의(실행질의)를 이용하여 작업을 하므로 초보자 분들에게는 조금 어려움이 있을 겁니다. 그러나 비정규형 테이블을 제1 정규형 테이블로 만드는 작업을 해야 할 경우가 종종 있습니다. 따라서 도움말이나 오피스튜터의 무료 강좌를 보시고 액세스 질의, 질의테이블을 만드는 방법 등에 대해 미리 공부해 두시길 바랍니다.

 

  목차 | 이전 | 다음