데이터 베이스 기본 (5)

엑세스의 모든 데이터는 테이블이라는 공간에 저장됩니다. 테이블에 저장된 원본 데이터를 가공하여 우리가 원하는 형태로 보여 주는 것 입니다. 제가 제공한 엑세스 연습 파일에는 4개의 테이블이 있습니다. 제조 업체에 관한 테이블, 제품 정보에 관한 테이블, 구입 처에 관한 테이블, 또 제품 수리 정보에 관한 테이블 입니다. 모든 테이블은 각각의 독립된 정보 셋트를 가지고 있지만 다른 테이블과의 관계를 가지고 있습니다. 예를 들어 내가 구입한 제품은 제조 업체가 있을 것이고, 구입 처가 있을 것이고, 또 수리 정보가 있을 것 입니다. 이 관계 설정에서 사용 되는 것이 지난 시간에 정한 기본 키입니다.

  1. 관계 설정의 필요성

    만약 제품 정보와 수리 정보를 엑셀의 한 시트에 정리를 한다고 생각해 보겠습니다. 나한테 100개의 제품이 있습니다. 그 중에 하나의 제품이 수리를 받아서 제품 수리 정보를 아이템 옆에 필드를 하나 만들어 추가 하고 싶습니다. 100개의 제품 중 하나의 제품이 수리를 받아서 추가한 2개의 필드는 수리 센터 이름과 수리 비용 입니다. 여기서부터 문제점이 발생하기 시작합니다. 1개의 제품만 수리를 받았는데 같은 테이블에 추가를 해주니 나머지 198개의 셀이 빈 셀로 공간을 차지 하게 되고 테이블의 크기는 엄청 나게 커지게 됩니다. 또 여기서 물품을 중고로 팔게 되어 그 제품 옆에 구매자에 관한 정보를 추가한다고 생각해 봅시다. 하나의 필드와 제품이 늘어날 때마다 나의 테이블의 크기는 기하 급수적으로 늘어 나게 됩니다.

     

    나의 데이터 베이스에 수리 정보가 있는 제품은 단 4개뿐 입니다. 엑셀에 이렇게 필드를 추가 하게 되면 테이블의 크기가 커지고 빈 셀이 많아 집니다.

     

    여기서 수리 정보에 대한 테이블을 따로 만들어 저장을 하게 되면 이런 문제점이 없어 지게 됩니다.

     

    제품 정보에 관한 테이블을 따로 만들어 제품에 관한 정보만 저장 합니다.

     

     

    제품 수리에 관한 정보 테이블만 만들어 제품 수리에 관한 정보만 기록 합니다. 테이블의 크기를 줄이며 빈 셀을 최소화 합니다.

     

    여기서 내가 가진 두 제품의 이름을 가지고 어떤 제품이 수리를 받았는지 알아야겠지요? 대부분의 경우 제품의 유일무이한 고유의 값, 기본키가 사용됩니다.

     

  2. 두 테이블을 이어 주는 두 필드 Primary Key(기본 키)와 Foreign Key (컴활 1급에서 머라고 하죠?)

    엑세스의 두 개의 테이블을 이어 주는 방법에는 3가지가 있지만 가장 많이 사용되는 것이 One to Many 관계 입니다. 하나의 제품이 여러 번의 수리를 받을 수 있기 때문에 제품은 One 그리고 수리 정보는 Many가 되는 것 입니다. 그리고 그 둘의 관계를 정하기 위해 수리 정보에 추가해 주는 별도의 필드가 Foreign Key라고 하고 제이킴은 Hungarian 스타일로 원래의 기본키에 FK(Foreign Key)를 붙입니다. 예를 들어 지금 내 자산 테이블의 기본 키는 AsseitID이고 관계 설정을 위해 수리 정보 테이블에 넣어주는 Foreign Key의 필드명은 AssetIDFK라고 짓습니다. 물론 이 방법은 반드시 정해 진 것은 아니며 제이킴이 해외 여러 포럼을 돌면서 익힌 가장 널리 쓰이고 표준화된 방법을 알려 드리는 것 입니다.

     

    수리 정보라는 별도의 테이블에 모든 수리 정보가 기록되고 수리 정보에도 역시 고유의 기본 키가 있습니다. 그 수리 정보와 어떤 제품을 이어 주는 것이 수리 정보 테이블에 추가된 AssetIDFK 필드 입니다.

     

     

    관계 설정에서 가장 널리 쓰이는 것이 One to Many 이며 지금 보시는 두 테이블의 선이 연결 선 입니다. 제이킴이 나중에 다 알려 줍니다.

     

     

    보통 큰 회사의 제고 정리나 급식 업체의 데이터 베이스의 경우 테이블과 관계 설정이 훨씬 복잡하지만 개념은 모두 갖습니다. 다음 그림은 제가 고급 편에서 다룰 엑세스의 예제 입니다

     

    이제 수리 정보와 제품을 이었으니 내가 받은 수리 내역을 알고 싶다면 수리 정보가 있는 데이터만 가져 오면 됩니다.

    엑세스에서는 매우 쉽게 수리 정보만 포함된 제품의 정보를 내가 원하는 대로 가져 올 수 있습니다.

     

    물론 위의 표를 엑셀로 거대한 엑셀의 테이블에서 VLOOKUP 함수와 ISEMPTY함수를 조합하면 만들 수 있습니다. 어떤 방법이든 하나의 프로그램에서 가능한 것은 다른 프로그램에서 가능하게 할 수도 있죠. 그러나 문제는 컴퓨터 메모리의 사용과 작업자의 작업 속도 등 하나 둘이 아닙니다. VLOOKUP 함수와 ISEMPTY함수를 알아야 하는 것도 그렇고 또 엑셀의 이 두 함수의 속도는 엑세스의 기본 쿼리 보다 훨씬 떨어지고 메모리 점유율도 높습니다 데이터가 몇 만개가 쌓인다면 엑셀로는 거의 업무가 불가능 해집니다.

     

    엑세스에 단순 관계 설정은 어렵지 않습니다. 더 중요한 것은 내가 어떤 부분을 테이블로 만들어 묶고 무엇을 Foreign Key로 지정하고 관계 설정은 어떤 종류로 해야 할지, 데이터의 무결성을 적용해야 할지 등 데이터베이스의 개념과 디자인에 더 시간을 투자 하셔야 합니다. 다시 강조 드리자면 엑세스는 엑셀처럼 단편적인 지식을 알아서 활용 할 수 있는 부분이 없고 반드시 일정 수준 이상이 되어야 합니다. 그러나 그 수준에 도달하게 되면 엑셀에서 경험하지 못했던 신세계를 경험하게 해 줄 것입니다.


+ Recent posts