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


11강. 제 2 정규화 #2

제 2 정규화 실습-2

제2정규화를 통해 [제품정보_2NF] 테이블을 만들었으며 [제품이름]을 기본키로 설정했습니다. 이 테이블을 다시 한번 살펴봅시다.

회사이름과 담당자가 중복되고 있는 것이 보입니다. 제품분류도 중복이 되지만 한 회사에서 한가지 분류의 제품을 만드는 경우도 있지만 여러 분류의 제품을 만드는 경우도 있기 때문에 제품분류는 기본키인 제품이름에 의존적인 필드입니다. 따라서 회사이름과 담당자 필드를 하나의 테이블로 떼어내는 것이 좋을 듯 합니다. 그리고 제품분류는 따로 제품분류 목록으로 구성된 조회 테이블로 만들고 제품분류 필드를 조회필드로 처리하도록 하는 것이 좋겠습니다.

참고] 조회테이블, 조회필드에 대해서는 지난 강좌를 읽어보십시오.

따라서 납품회사와 담당자를 떼어내서 하나의 테이블을 만들도록 합니다.
기타 추가정보를 위한 필드도 아래와 같이 만들어야 할 겁니다. 이 작업을 마친 후 제일 마지막에 이 필드를 추가하겠습니다.

회사정보의 기본키는 무엇으로 하시겠습니까? 회사마다 회사고유코드를 만들어서 기본키로 사용하도록 하겠습니다. 그 이유를 모르신다면 ‘인덱스’, ’기본키’에 대한 이전 강좌를 다시 한번 읽어보십시오.

테이블의 자료가 많지 않으니 이번에는 질의를 이용하지 않고 수작업을 해도 되나 가능하면 질의를 이용하도록 합니다.

다음 순서대로 진행합니다.
1. [제품정보_2NF] 테이블을 복사하여 [제품정보_2NF_1] 이름으로 저장합니다.
2. 빈 질의테이블을 하나 만들고 SQL창을 연 다음 다음의 SQL문을 SQL창에 복사해 넣습니다. (이 과정을 모르시는 분은 이전 강좌를 열어 보십시오.)

SELECT DISTINCT 제품정보_2NF.회사이름, 제품정보_2NF.담당자
INTO 회사정보_2NF
FROM 제품정보_2NF;

3. [회사정보_2NF 테이블 생성 Query]라는 이름으로 저장하고 실행을 시키면 [회사정보_2NF]라는 테이블이 만들어집니다.
4. [회사정보_2NF] 테이블을 디자인 보기로 열고 [회사코드] 필드를 하나 추가하고 형식은 텍스트, 크기는 10글자로 설정합니다.
5. [회사이름]을 기본키로 설정한 다음 저장해봅니다. 이때 기본키의 중복오류가 발생하지 않아야 합니다.
6. [회사정보_2NF] 테이블을 데이터시트보기로 열고 회사이름에 알맞게 [회사코드] 필드에 고유한 값을 입력하도록 합니다.
7. 다시 [회사정보_2NF] 테이블을 디자인 보기로 열고 [회사이름] 필드 대신 [회사코드] 필드를 기본키로 만들어 줍니다.
8. 이제 [제품정보_2NF_1] 테이블의 [회사이름] 필드를 [회사코드]로 갱신해주고 나서 [담당자]필드를 삭제하는 일이 남았습니다. 먼저 빈 질의테이블을 디자인 보기로 만들고 [회사정보_2NF]와 [제품정보_2NF_1] 테이블을 추가한 다음 [회사이름] 필드로 조인을 시키고 쿼리 메뉴에서 업데이트질의를 클릭한 다음 아래와 같은 업데이트 질의를 만듭니다.

UPDATE 제품정보_2NF_1 INNER JOIN 회사정보_2NF
ON 제품정보_2NF_1.회사이름 = 회사정보_2NF.회사이름
SET 제품정보_2NF_1.회사이름 = [회사코드];

9. 이제 메뉴에서 [쿼리]-[실행]을 클릭하면 [제품정보_2NF_1] 테이블의 [회사이름] 필드 내용이 회사코드 필드의 내용으로 바뀝니다.
10. [제품정보_2NF_1]를 디자인 보기로 열고 [회사이름] 필드의 이름을 [회사코드]로 바꾸고 [담당자] 필드는 제거하면 끝입니다.
11. 마지막으로 관계를 설정해 줍니다. 결국 하나의 테이블이 3개로 분리되어 다음과 같은 관계를 형성하였습니다.

제 2 정규화 실습-3

[제품분류_2NF_1] 테이블에서 제품분류 필드를 위한 조회 테이블 만들기
[제품정보_2NF_1] 테이블을 열고 확인해 봅시다.

[제품분류] 단일 필드가 중복되고 있습니다. 이것만으로도 새로운 테이블을 만들어야 할 이유가 될 수 있습니다. 그리고 값을 직접 입력하지 않고 목록상자나 콤보상자에서 선택할 수 있도록 액세스의 조회필드를 이용하는 것이 편리할 겁니다.

이제 [제품분류] 라는 이름의 조회 테이블을 하나 만들어 사용해 보도록 합시다. 제품분류 항목을 넣을 테이블에는 그 분류에 대한 [설명]이 있으면 좋겠습니다.
테이블 생성질의를 이용합니다. 중복된 자료를 중복되지 않도록 추출하려면 질의문에 DISTINCT 키워드가 필요합니다.
빈 질의테이블을 하나 만들고 SQL창을 연 다음 아래 내용을 복사해서 붙이고 디자인 보기로 확인한 다음 실행시키십시오. [제품분류] 테이블이 만들어집니다.

SELECT DISTINCT 제1정규화테이블.제품분류, "" AS 설명
INTO 제품분류_2NF
FROM 제1정규화테이블;

새로 만들어진 [제품분류] 테이블을 디자인 보기로 열고 설명 필드의 속성을 ‘메모’로 설정하시고 각 분류에 대한 설명을 입력하도록 하십시오. 분류항목에 설명을 입력해 두어야 나중에 자료를 관리할 때 편합니다.

항상 기본키를 확인하셔야 합니다.
[분류명] 필드의 크기는 그렇게 크지 않으므로 [분류명] 필드의 값을 그대로 참조해서 실제 필드 값으로 저장하는 방법도 무리는 없을 듯 합니다. 따라서 일련번호 필드(분류ID)를 추가하여 기본키로 사용하고 [분류명] 필드에는 고유 인덱스를 만들어 주도록 합니다. 문자보다는 숫자를 기본키로 설정하는 것이 내부적으로 빠르게 작업을 합니다.
만약 [분류명] 필드를 코드로 만들 수 있다면 코드화된 기본키 필드를 사용하도록 합니다. 그리고 조회필드에는 코드 값을 넣어주는 것이 좋겠습니다. 그러나 일단 여기서는 분류명을 코드로 처리하지 않고 분류명을 그대로 조회 값으로 사용하기로 했습니다.

이제 조회 필드를 만들어 봅시다. 조회필드/조회테이블에 대해서는 액세스 질의 강좌를 하면서 설명을 드리도록 하겠습니다.

[제품정보_2NF_1] 테이블을 복사하여 [제품정보_2NF_2] 라는 이름으로 저장한 다음 [제품정보_2NF_2] 테이블을 디자인 보기로 열고 다음과 [제품분류] 필드를 선택하고 조회 탭에서 행원본 유형을 ‘테이블/쿼리’ 로 설정하고 행원본은 [제품분류_2NF]테이블을 기초로 한 질의를 작성하여 사용합니다. 행원본으로 쓸 질의문을 점이 3개 찍힌 버튼을 누르면 질의작성 마법사가 뜨는데 이것을 이용하여 작성하도록 합니다.

행원본에 사용될 질의에는 분류명을 그대로 조회하여 사용할 것이므로 다음과 같이 분류명 필드 하나만 포함시키고 저장한다.

[제품정보_2NF_2] 테이블을 열고 제품분류 필드를 클릭하면 콤보상자가 나타난다.

이렇게 해서 [제1정규화 테이블]을 제2정규화 과정을 통해 만들어 낸 테이블이 [판매정보], [회사정보], [제품정보], [제품분류] 테이블입니다.

이것으로 제2 정규형 테이블에 대한 강좌를 마칩니다. 다음 강좌는 제3 정규형에 대한 내용입니다.

억사모 회원 여러분!
새해 복 많이 받으시고 올해가 여러분의 해가 되기를 기원합니다.
 

 

  목차 | 이전 | 다음