데이터베이스 디자인의 기초

디자인이 제대로 된 데이터베이스를 사용하면 정확한 최신 정보에 액세스할 수 있습니다. 올바른 디자인은 데이터베이스를 사용한 작업의 목표를 달성하는 데 매우 중요한 요소이므로 시간을 투자하여 좋은 디자인의 원칙에 대해 익히는 것이 좋습니다. 결국 목표는 사용자의 요구에 잘 맞고 변경 내용을 쉽게 반영할 수 있는 데이터베이스를 디자인하는 것입니다.

이 문서에서는 데이터베이스를 계획하는 지침에 대해 설명합니다. 또한 필요한 정보를 결정하는 방법, 해당 정보를 적절한 테이블 및 열로 구분하는 방법, 해당 테이블 간에 관계를 설정하는 방법 등에 대해서도 설명합니다. 데이터베이스를 만들기 전에 반드시 이 문서를 읽어 보시기 바랍니다.

이 문서의 내용


몇 가지 중요한 데이터베이스 관련 용어

Microsoft Office Access 2007에서는 정보를 테이블로 구성합니다. 테이블은 행과 열 목록으로 구성되며 회계 장부 또는 Microsoft Office Excel 2007 워크시트와 유사합니다. 간단한 데이터베이스에는 테이블이 하나만 있을 수 있습니다. 그러나 대부분의 데이터베이스에는 둘 이상의 테이블이 필요합니다. 예를 들어 제품에 대한 정보를 저장하는 테이블, 주문에 대한 정보를 저장하는 테이블, 고객에 대한 정보를 저장하는 테이블 등, 구분된 여러 테이블이 함께 필요할 수 있습니다.

세 테이블을 데이터시트로 보여 주는 이미지

각 행은 레코드라고 하며, 각 열은 필드라고도 합니다. 레코드는 의미 있고 일관된 방법으로 정보를 결합합니다. 필드는 단일 정보 항목으로, 모든 레코드에 나타나는 항목 유형입니다. 예를 들어 제품 테이블에서 각 행 또는 레코드에는 한 제품에 대한 정보가 저장됩니다. 각 열 또는 필드에는 이름, 가격 등 해당 제품에 대한 몇 가지 정보 유형이 저장됩니다. 

맨 위로 이동 맨 위로 이동

훌륭한 데이터베이스 디자인에 대한 정의

데이터베이스 디자인 프로세스에는 몇 가지 원칙이 있습니다. 첫 번째 원칙은 중복된 데이터라고도 하는 중복 정보를 사용하면 공간을 낭비하고 오류 및 불일치가 발생할 가능성이 늘어나므로 사용하지 않는 것이 좋다는 것입니다. 두 번째 원칙은 정확하고 완전한 정보를 사용해야 한다는 것입니다. 데이터베이스에 잘못된 정보가 포함될 경우 해당 데이터베이스에서 정보를 가져와 만든 보고서에도 잘못된 정보가 포함될 수 있습니다. 따라서 이러한 보고서에 근거하여 결정을 내리면 잘못된 정보를 토대로 결정을 내리는 것이 됩니다.

따라서 다음과 같은 디자인이 좋은 데이터베이스 디자인이라고 할 수 있습니다.

  • 정보를 주제별 테이블로 구분하여 중복된 데이터를 줄이는 디자인
  • 필요에 따라 테이블의 정보를 함께 결합하는 데 필요한 정보를 제공하는 디자인
  • 정보의 정확도 및 무결성을 지원하고 보장하는 데 도움이 되는 디자인
  • 데이터 처리 및 보고 요구를 반영하는 디자인

맨 위로 이동 맨 위로 이동

디자인 프로세스

디자인 프로세스는 다음과 같은 단계로 구성됩니다.

  • 데이터베이스의 용도 결정    

이 단계는 나머지 단계를 준비하는 데 도움이 됩니다.

  • 필요한 정보 찾기 및 구성    

제품 이름, 주문 번호 등 데이터베이스에 기록할 모든 유형의 정보를 수집합니다.

  • 정보를 테이블로 구분    

정보 항목을 제품, 주문 등의 주요 항목이나 주제로 구분합니다. 그러면 각 주제가 하나의 테이블이 됩니다.

  • 정보 항목을 열로 변환    

각 테이블에 저장할 정보를 결정합니다. 각 항목은 필드가 되며 테이블의 열로 표시됩니다. 예를 들어 직원 테이블에는 성과 입사일 같은 필드가 포함될 수 있습니다.

  • 기본 키 지정    

각 테이블의 기본 키를 선택합니다. 기본 키는 각 행을 고유하게 식별하는 데 사용되는 열입니다. 예를 들어 제품 번호 또는 주문 번호가 될 수 있습니다.

  • 테이블 관계 설정    

각 테이블을 검토하고 한 테이블의 데이터와 다른 테이블의 데이터 간에 관계를 설정할 수 있는 방법을 결정합니다. 필요에 따라 테이블에 필드를 추가하거나 새 테이블을 만들어 관계를 명확하게 나타냅니다.

  • 디자인 다듬기    

디자인을 분석하여 오류를 검사합니다. 테이블을 만들고 몇 가지 예제 데이터 레코드를 추가하여 테이블에서 원하는 결과를 얻을 수 있는지 확인합니다. 필요에 따라 디자인을 조정합니다.

  • 정규화 규칙 적용    

데이터 정규화 규칙을 적용하여 테이블의 구조가 올바른지 확인합니다. 필요에 따라 테이블을 조정합니다.

맨 위로 이동 맨 위로 이동

데이터베이스의 용도 결정

데이터베이스의 용도, 데이터베이스를 사용할 방법, 데이터베이스를 사용할 사람 등을 종이에 기록해 보는 것이 좋습니다. 가정용으로 사용할 작은 데이터베이스를 디자인하려는 경우 "우편물 및 보고서 생성에 사용할 고객 정보 목록을 저장하는 고객 데이터베이스"와 같이 간단하게 기록할 수 있습니다. 기업 환경에서 사용하는 경우처럼 좀 더 복잡하거나 여러 사람이 사용하는 데이터베이스를 디자인하려는 경우 분명 용도는 한 단락 이상으로 정의될 것이며 각 사람이 데이터베이스를 언제 어떻게 사용할지에 대한 내용이 포함되어야 합니다. 디자인 프로세스 전체에서 참조할 수 있는 잘 개발된 기업 목표가 있으면 의사 결정을 할 때 목표에만 중점을 둘 수 있습니다. 

맨 위로 이동 맨 위로 이동

필요한 정보 찾기 및 구성

필요한 정보를 찾아 구성하려면 기존 정보부터 시작합니다. 예를 들어 구매 주문서를 장부 형태로 기록하거나 고객 정보를 종이 양식에 기록하여 서류 캐비닛에 보관할 수 있습니다. 이러한 문서를 수집하여 표시되는 각 정보 유형(예: 양식에서 입력하는 각 상자)을 나열합니다. 기존 양식이 없을 경우 대신 고객 정보를 기록할 양식을 디자인해야 한다고 생각합니다. 양식에 어떤 정보를 입력해야 할까요? 어떤 텍스트 상자를 만들어야 할까요? 각 항목을 식별하여 나열해 보십시오. 예를 들어 현재 고객 목록을 색인 카드로 보관하고 있다고 가정해 보십시오. 이러한 카드를 검토해 보면 각 카드에 고객 이름, 주소, 시/도, 구/군/시, 우편 번호, 전화 번호 등이 기록되어 있는 것을 확인할 수 있습니다. 이러한 각 항목이 테이블에서는 열로 나타날 수 있습니다.

이 목록을 준비할 때 처음부터 완벽한 목록을 만들지 않아도 됩니다. 대신 생각나는 대로 각 항목을 나열하십시오. 다른 사람이 데이터베이스를 사용할 예정이라면 그 사람의 의견도 물어 보십시오. 나중에 목록을 세부적으로 조정할 수 있습니다.

다음으로 데이터베이스에서 생성할 보고서 또는 우편물의 유형을 고려해야 합니다. 예를 들어 지역별 매출을 보여 주는 제품 판매 보고서, 제품 재고 수준을 보여 주는 재고 요약 보고서 등을 만들 수 있습니다. 또한 할인 판매 행사를 알리거나 고급 서비스를 제공하는 양식 편지를 만들어 고객에게 보낼 수 있습니다. 보고서의 디자인을 고려하고 모양을 생각해 봅니다. 보고서에 넣을 정보를 생각해 보고 각 항목을 나열해 보십시오. 양식 편지 및 만들 기타 다른 보고서에 대해서도 마찬가지입니다.

제품 재고 보고서를 구상하고 있는 사람

만들 보고서 및 우편물에 대해 생각해 보면 데이터베이스에 필요한 항목을 식별할 수 있습니다. 예를 들어 정기적인 전자 메일 업데이트에 동의하거나 거부할 기회를 고객에게 제공하고 동의한 고객 목록을 출력하려는 경우를 가정해 볼 수 있습니다. 해당 정보를 기록하려면 고객 테이블에 "전자 메일 보내기" 열을 추가하고 각 고객에 대해 해당 필드를 예 또는 아니요로 설정할 수 있습니다.

고객에게 전자 메일 메시지를 보내려면 다른 항목도 기록해야 합니다. 전자 메일 메시지 수신에 동의한 고객을 알고 있으면 메시지를 보낼 전자 메일 주소도 알고 있어야 합니다. 따라서 각 고객의 전자 메일 주소도 기록해야 합니다.

각 보고서나 출력 목록의 프로토타입을 구성하고 보고서를 생성하는 데 필요한 항목을 고려하는 것도 좋은 방법입니다. 예를 들어 양식 편지를 검토할 때는 몇 가지 사항을 고려할 수 있습니다. 즉, 인사말을 시작하는 "Mr.", "Mrs.", "Ms." 문자열과 같은 적절한 인사말을 포함하려면 인사말 항목을 만들어야 합니다. 또한 일반적으로 "Dear. Mr. Sylvester Smith"가 아니라 "Dear Mr. Smith"와 같은 문자로 시작할 수 있습니다. 이런 경우 이름과 성을 구분하여 저장하는 것이 좋습니다. 

이때 중요한 점은 각 정보를 유용한 가장 작은 부분으로 구분해야 한다는 것입니다. 이름의 경우 성을 쉽게 사용할 수 있도록 하려면 이름과 성의 두 가지 부분으로 이름을 구분합니다. 예를 들어 성을 기준으로 보고서를 정렬하려는 경우 고객의 성을 별도로 저장해 두면 도움이 됩니다. 일반적으로 정보 항목을 기준으로 정렬, 검색, 계산 또는 보고하려면 해당 항목을 고유한 필드로 저장해야 합니다. 

데이터베이스를 통해 대답할 질문을 고려해 보십시오. 예를 들어 지난 달 주요 제품의 판매 실적은 얼마나 됩니까? 최우수 고객은 어디에 살고 계십니까? 가장 잘 판매되는 제품의 공급업체는 어디입니까? 등의 질문을 고려할 수 있습니다. 이러한 질문을 예상하면 기록할 추가 항목에 초점을 맞출 수 있습니다.

이러한 정보를 모두 수집하고 나면 다음 단계를 준비할 수 있습니다.

맨 위로 이동 맨 위로 이동

정보를 테이블로 구분

정보를 테이블로 구분하려면 주요 항목 또는 주제를 선택합니다. 예를 들어 제품 판매 데이터베이스에 필요한 정보를 찾아 구성하면 기본 목록이 다음과 같이 나타날 수 있습니다.

주제별로 그룹화된 필기 정보 항목

여기에 표시된 주요 항목은 제품, 공급업체, 고객 및 주문입니다. 따라서 제품에 대한 팩트 테이블, 공급업체에 대한 팩트 테이블, 고객에 대한 팩트 테이블, 주문에 대한 팩트 테이블의 테이블 네 개로 시작하는 것이 좋습니다. 완전한 목록은 아니지만 좋은 시작이라고 할 수 있습니다. 이 목록을 계속 구체화하면 뛰어난 디자인을 만들 수 있습니다.

기본적인 항목 목록을 먼저 검토한 다음 위 그림에 표시된 네 개의 테이블 대신 단일 테이블에 모든 항목을 넣을 수 있습니다. 그러나 아래에 표시된 테이블을 잠깐 살펴 보면 별로 좋은 생각이 아니라는 것을 금방 알 수 있습니다.

제품과 공급업체가 모두 포함된 테이블을 보여 주는 이미지

이 경우 각 행에 제품과 공급업체 둘 다에 대한 정보가 포함됩니다. 동일한 공급업체에서 여러 제품을 제공할 수 있으므로 공급업체 이름 및 주소 정보를 여러 번 반복해야 합니다. 이렇게 하면 디스크 공간이 낭비됩니다. 별도의 공급업체 테이블을 만들어 공급업체 정보만 기록한 다음 해당 테이블을 제품 테이블에 연결하면 훨씬 더 좋은 방법이 될 수 있습니다.

이 디자인과 관련된 또 다른 문제는 공급업체에 대한 정보를 수정해야 하는 경우에 발생합니다. 예를 들어 공급업체의 주소를 변경해야 하는 경우 해당 주소가 여러 위치에 나타나기 때문에 한 위치에서는 주소를 변경했지만 다른 위치의 주소를 변경하지 않는 실수를 할 수 있습니다. 공급업체의 주소를 한 위치에만 기록하면 이러한 문제는 쉽게 해결됩니다.

데이터베이스를 디자인할 때는 항상 각 팩트를 한 번만 기록해야 합니다. 특정 공급업체의 주소와 같은 동일한 정보가 여러 위치에서 반복될 경우에는 해당 정보를 별도의 테이블로 저장하십시오.

마지막으로 태일 양조에서 제공하는 제품이 하나만 있는 경우 해당 제품은 삭제하지만 공급업체 이름과 주소 정보는 유지하려는 경우가 있을 수 있습니다. 어떻게 하면 공급업체 정보는 손실하지 않고 제품 레코드만 삭제할 수 있을까요? 그렇게 할 수 없습니다. 각 레코드에 제품에 대한 팩트와 공급업체에 대한 팩트가 모두 포함되어 있으므로 다른 팩트를 삭제하지 않고 한 팩트만 삭제할 수 없습니다. 이러한 팩트를 별도로 유지하려면 한 테이블을 두 개로 분할하여 한 테이블에는 제품 정보, 다른 테이블에는 공급업체 정보를 저장해야 합니다. 이렇게 한 다음 제품 레코드를 삭제하면 제품에 대한 팩트만 삭제되고 공급업체에 대한 팩트는 삭제되지 않습니다.

테이블로 나타낼 주제를 선택한 다음에는 해당 테이블의 열에 해당 주제에 대한 팩트만 저장해야 합니다. 예를 들어 제품 테이블에는 제품에 대한 팩트만 저장해야 합니다. 공급업체 주소는 제품에 대한 팩트가 아니라 공급업체에 대한 팩트이므로 공급업체 테이블에 속합니다.

맨 위로 이동 맨 위로 이동

정보 항목을 열로 변환

테이블의 열을 결정하려면 테이블에 기록된 주제와 관련하여 추적할 정보를 결정해야 합니다. 예를 들어 고객 테이블의 경우 이름, 주소, 시/도-구/군/시-우편 번호, 전자 메일 보내기, 인사말, 전자 메일 주소 등으로 시작하여 열을 구성하는 것이 좋습니다. 테이블의 각 레코드에는 동일한 열 집합이 포함되므로 각 레코드에 대해 이름, 주소, 시/도-구/군/시-우편 번호, 전자 메일 보내기, 인사말 및 전자 메일 주소 정보를 저장할 수 있습니다. 예를 들어 주소 열에는 고객의 주소가 포함됩니다. 각 레코드에는 한 고객에 대한 데이터가 포함되며 주소 필드에는 해당 고객의 주소가 포함됩니다.

처음에 각 테이블의 열 집합을 결정한 다음 나중에 열을 조정할 수 있습니다. 예를 들어 이름과 성이라는 두 개의 열로 고객 이름을 저장하면 해당 열에서만 정렬, 검색 및 인덱싱 작업을 실행할 수 있습니다. 마찬가지로 주소는 주소, 시/도, 구/군/시, 우편 번호 및 국가/지역의 다섯 가지 구성 요소로 구성되므로 별도의 열에 저장하는 것이 좋습니다. 예를 들어 구/군/시별로 검색, 필터링 또는 정렬 작업을 실행하려면 구/군/시 정보를 별도의 열에 저장해야 합니다.

또한 데이터베이스에 국내 정보만 저장할지 국가별 정보도 저장할지를 고려해야 합니다. 예를 들어 국가별 주소를 저장하려는 경우에는 구/군/시 열 대신 지역 열을 사용하는 것이 좋습니다. 이러한 지역 열에는 국내의 구/군/시 정보 및 다른 국가/지역의 지역 정보를 모두 포함할 수 있기 때문입니다. 마찬가지로 국가별 주소를 저장하려는 경우에는 다섯 자리의 우편 번호보다 일반 우편 번호를 사용하는 것이 좋습니다.

다음 목록에서는 열을 결정하는 몇 가지 팁을 보여 줍니다.

  • 계산된 데이터를 포함하지 않습니다.    

대부분의 경우 계산 결과는 테이블에 저장하지 않는 것이 좋습니다. 대신 Access에서 계산을 수행하여 결과를 확인할 수 있습니다. 예를 들어 데이터베이스의 각 제품 분류에 대한 수주량의 부분합이 표시되는 주문 제품 보고서가 있을 수 있지만 테이블에 주문 단위 부분합 열이 표시되지는 않습니다. 대신 제품 테이블에 각 제품의 수주량을 저장하는 주문 단위 열이 포함됩니다. Access에서는 보고서를 출력할 때마다 해당 데이터를 사용하여 부분합을 계산하지만 부분합 자체가 테이블에 저장되지는 않습니다.

  • 가장 작은 논리적 부분으로 정보를 저장합니다.    

단일 필드에 전체 이름을 포함하거나 제품 이름과 제품 설명을 함께 포함할 수 있습니다. 그러나 두 종류 이상의 정보를 결합하여 한 필드에 나타내면 나중에 개별 필드를 검색하는 데 어려움이 있습니다. 정보를 논리적 부분으로 구분하십시오. 예를 들어 이름과 성에 대해 별도의 필드를 만들거나 제품 이름, 제품 분류 및 설명에 대해 별도의 필드를 만드는 것이 좋습니다.

디자인하는 동안 정보 항목의 목록

각 테이블의 데이터 열을 조정하고 나면 각 테이블의 기본 키를 선택할 수 있습니다.

맨 위로 이동 맨 위로 이동

기본 키 지정

각 테이블에는 테이블에 저장된 각 행을 고유하게 식별하는 열이나 열 집합이 포함되어야 합니다. 이 열은 직원 ID 번호나 일련 번호와 같은 고유한 ID 번호인 경우가 많습니다. 데이터베이스 용어로 이 정보를 테이블의 기본 라고 합니다. Access에서는 기본 키 필드를 사용하여 여러 테이블의 데이터를 신속하게 연결하고 데이터를 함께 가져올 수 있습니다.

카탈로그에서 각 제품을 고유하게 식별하는 제품 번호와 같은 고유한 식별자가 테이블에 이미 지정되어 있으면 해당 식별자를 테이블의 기본 키로 사용할 수 있습니다. 그러나 이 열의 값이 각 레코드에 대해 항상 다른 경우에만 해당합니다. 기본 키는 중복 값을 가질 수 없습니다. 예를 들어 사람의 이름은 고유하지 않으므로 기본 키로 사용할 수 없습니다. 같은 테이블에 이름이 같은 두 명의 사람이 있을 수 있기 때문입니다. 

기본 키에는 항상 값이 있어야 합니다. 열 값이 지정되지 않았거나 특정 지점에서 값이 누락되어 알 수 없는 경우 이 열을 기본 키로 구성할 수 없습니다.

기본 키의 값은 항상 변경되지 않아야 합니다. 둘 이상의 테이블을 사용하는 데이터베이스에서 테이블의 기본 키는 다른 테이블에서 참조로 사용할 수 있습니다. 기본 키가 변경되면 키가 참조되는 모든 위치에도 변경 내용이 적용되어야 합니다. 변경되지 않는 기본 키를 사용하면 기본 키를 참조하는 다른 테이블과 기본 키가 동기화되지 않을 수 있는 가능성이 줄어듭니다.

임의의 고유 번호가 기본 키로 사용되는 경우가 자주 있습니다. 예를 들어 각 순서에 고유한 순서의 번호를 지정할 수 있습니다. 순서 번호는 단지 순서를 식별하기 위한 것입니다. 지정된 순서 번호는 변경되지 않습니다.

기본 키로 사용하기에 적합한 열이나 열 집합이 없으면 일련 번호 데이터 형식이 지정된 열을 사용하는 것이 좋습니다. 일련 번호 데이터 형식을 사용하면 Access에서 값이 자동으로 할당됩니다. 이러한 식별자에는 팩트가 없으며 해당 식별자가 나타내는 행을 설명하는 팩트 정보가 포함되지 않습니다. 팩트가 없는 식별자는 변경되지 않으므로 기본 키로 사용하기에 가장 적합합니다. 행에 대한 실제 정보, 즉 전화 번호나 고객 이름 등은 변경될 수 있으므로 이러한 정보가 들어 있는 기본 키는 변경될 가능성이 높습니다.  


기본 키 필드가 있는 제품 테이블을 보여 주는 이미지

설명선 1 일련 번호 데이터 형식으로 설정된 열이 기본 키로 사용하기에 적합합니다. 두 개의 제품 번호가 동일한 경우는 없습니다.

경우에 따라 테이블의 기본 키를 제공하는 필드를 두 개 이상 사용해야 할 수 있습니다. 예를 들어 주문을 위한 제품군 항목을 저장하는 주문 정보 테이블에서 기본 키에 주문 번호와 제품 번호라는 두 열을 사용합니다. 이처럼 두 개 이상의 열을 사용하는 기본 키를 복합 키라고 합니다.

제품 판매 데이터베이스의 경우 제품 테이블의 제품 번호, 고객 테이블의 고객 번호 등 각 테이블에 대해 일련 번호 열을 만들어 기본 키로 사용할 수 있습니다.

디자인하는 동안의 정보 항목을 보여 주는 이미지

맨 위로 이동 맨 위로 이동

테이블 관계 만들기

정보를 테이블로 구분했으므로 다시 의미 있는 방식으로 해당 정보를 함께 가져와야 합니다. 예를 들어 다음 폼에는 여러 테이블의 정보가 포함됩니다.


주문 폼

설명선 1 이 폼의 정보를 가져오는 위치는 고객 테이블...
설명선 2 ...직원 테이블...
설명선 3 ...주문 테이블...
설명선 4 ...제품 테이블...
설명선 5 ...및 주문 정보 테이블입니다.

Access는 관계형 데이터베이스 관리 시스템입니다. 관계형 데이터베이스에서는 정보를 별도의 주제별 테이블로 구분합니다. 그런 다음 필요에 따라 테이블 관계를 사용하여 해당 정보를 함께 가져옵니다.

맨 위로 이동 맨 위로 이동

일대다 관계 만들기

제품 주문 데이터베이스의 공급업체 및 제품 테이블을 살펴보겠습니다. 한 공급업체에서 여러 가지 제품을 제공할 수 있으므로 공급업체 테이블에 표시된 공급업체에 대해 여러 가지 제품이 제품 테이블에 표시될 수 있습니다. 따라서 공급업체 테이블과 제품 테이블의 관계는 일대다 관계입니다.

일대다 개념

데이터베이스 디자인에서 일대다 관계를 나타내려면 관계의 "일"쪽에 기본 키를 지정하고 관계의 "다"쪽에 있는 테이블에 추가 열로 해당 기본 키를 추가합니다. 이 경우 공급업체 테이블의 공급업체 번호 열을 제품 테이블에 추가합니다. 그러면 Access에서는 제품 테이블의 공급업체 번호를 사용하여 각 제품의 올바른 공급업체를 찾을 수 있습니다.

이때 제품 테이블의 공급업체 번호 열을 외래 키라고 합니다. 외래 키는 다른 테이블의 기본 키입니다. 제품 테이블의 공급업체 번호 열은 공급업체 테이블에서 기본 키로도 사용되기 때문에 외래 키입니다.

디자인하는 동안 정보 항목의 목록

기본 키와 외래 키의 쌍을 지정하여 관련 테이블을 결합할 수 있습니다. 공통된 열을 공유해야 하는 테이블이 확실하지 않은 경우 일대다 관계를 식별하면 관련된 두 테이블에 공유 열이 필요한지 확인할 수 있습니다.

맨 위로 이동 맨 위로 이동

다대다 관계 만들기

제품 테이블과 주문 테이블 간 관계를 살펴봅니다.

하나의 주문에 둘 이상의 제품이 포함될 수 있으며 하나의 제품이 여러 주문에 나타날 수 있습니다. 따라서 주문 테이블의 각 레코드에 대해 제품 테이블의 여러 레코드가 지정될 수 있으며 제품 테이블의 각 레코드에 대해 주문 테이블의 여러 레코드가 지정될 수 있습니다. 제품에 대해 여러 주문이 지정되고 주문에 대해 여러 제품이 지정될 수 있는 이러한 유형의 관계를 다대다 관계라고 합니다. 테이블 간의 다대다 관계를 검색하려면 관계의 양쪽을 모두 고려해야 합니다.

주문과 제품이라는 두 테이블의 주제에 다대다 관계가 있습니다. 이런 경우 문제가 될 수 있습니다. 이 문제를 이해하려면 주문 테이블에 제품 번호 필드를 추가하여 두 테이블 간에 관계를 만들려고 하면 어떻게 될지 생각해 보십시오. 각 주문에 둘 이상의 제품을 지정하려면 각 주문에 대해 둘 이상의 레코드가 주문 테이블에 있어야 합니다. 하나의 주문과 관련되는 각 행에 대해 주문 정보가 반복되므로 잘못된 데이터를 제공하는 비효율적인 디자인이 될 수 있습니다. 제품 테이블에 주문 번호 필드를 넣는 경우에도 같은 문제에 직면하게 됩니다. 즉, 제품 테이블의 각 제품에 대해 둘 이상의 레코드가 포함됩니다. 이 문제를 어떻게 해결할 수 있을까요?    

접합 테이블이라는 세 번째 테이블을 만들어 다대다 관계를 두 개의 일대다 관계로 분리하고 두 테이블에 있는 각 기본 키를 세 번째 테이블에 삽입합니다. 그러면 세 번째 테이블에 각 관계의 발생이나 인스턴스가 기록됩니다.

다대다 관계

주문 정보 테이블의 각 레코드는 주문의 줄 항목 하나를 나타냅니다. 주문 정보 테이블의 기본 키는 주문 테이블과 제품 테이블의 외래 키라는 두 개의 필드로 구성됩니다. 하나의 주문에 여러 개의 줄 항목이 있을 수 있으므로 주문 번호 필드만 사용하면 이 테이블의 기본 키로 작동하지 않습니다. 주문의 각 줄 항목에 대해 주문 번호가 반복되므로 필드에 고유 값이 포함되지 않습니다. 제품 번호 필드만 사용하는 경우에도 한 제품이 여러 개의 다른 주문에 나타날 수 있기 때문에 제대로 작동하지 않습니다. 그러나 두 필드를 함께 사용하면 각 필드에 대해 고유 값이 생성됩니다. 

제품 판매 데이터베이스의 주문 테이블과 제품 테이블은 서로 직접적인 관련이 없습니다. 대신 두 테이블은 주문 정보 테이블을 통해 간접적으로 관련됩니다. 주문과 제품 간의 다대다 관계는 두 개의 일대다 관계를 사용하여 데이터베이스에 표시됩니다.

  • 주문 테이블과 주문 정보 테이블에는 일대다 관계가 있습니다. 각 주문에는 둘 이상의 줄 항목이 있지만 각 줄 항목은 주문 하나에만 연결됩니다.
  • 제품 테이블과 주문 정보 테이블에는 일대다 관계가 있습니다. 각 제품에는 관련된 여러 줄 항목이 있을 수 있지만 각 줄 항목은 제품 하나만 참조합니다.

주문 정보 테이블에서 특정 주문에 포함된 모든 제품을 확인할 수 있습니다. 또한 특정 제품에 대한 모든 주문을 확인할 수 있습니다.

주문 정보 테이블을 통합한 후에는 테이블 및 필드 목록이 다음과 같이 표시됩니다.

디자인하는 동안 정보 항목의 목록

맨 위로 이동 맨 위로 이동

일대일 관계 만들기

다른 유형의 관계로 일대일 관계가 있습니다. 예를 들어 거의 필요하지 않거나 몇 가지 제품에만 적용되는 특수한 보충 제품 정보를 기록해야 할 수 있습니다. 이러한 정보는 자주 사용하지 않을 뿐만 아니라 제품 테이블에 저장하면 해당 정보가 적용되지 않는 모든 제품에 대해 빈 공간을 사용하게 되므로 별도의 테이블에 저장하는 것이 좋습니다. 제품 테이블과 마찬가지로 제품 번호를 기본 키로 사용합니다. 이러한 보충 테이블과 제품 테이블 간 관계는 일대일 관계입니다. 제품 테이블의 각 레코드에 대해 보충 테이블에는 일치하는 레코드가 하나만 있습니다. 이러한 관계를 식별할 때 두 테이블은 공통 필드를 공유하고 있어야 합니다.

데이터베이스에 일대일 관계가 필요한지 검색할 때는 두 테이블의 정보를 한 테이블에 모두 저장할 수 있는지 여부를 고려해야 합니다. 빈 공간이 너무 사용되는 등 몇 가지 이유 때문에 이 작업을 실행하지 않으려고 할 수 있습니다. 다음 목록에서는 데이터베이스 디자인에서 이 관계를 나타내는 방법을 보여 줍니다.

  • 두 테이블의 주제가 같은 경우에는 두 테이블에서 동일한 기본 키를 사용하여 관계를 설정할 수 있습니다.
  • 두 테이블의 주제와 기본 키가 다른 경우 테이블 하나를 선택하고 해당 테이블의 기본 키를 다른 테이블의 외래 키로 삽입합니다.

테이블 간 관계를 확인하면 올바른 테이블과 열이 있는지 확인할 수 있습니다. 일대일 또는 일대다 관계가 있으면 관련된 테이블은 공통 열을 공유해야 합니다. 다대다 관계가 있으면 관계를 나타내는 데 세 번째 테이블이 필요합니다.

맨 위로 이동 맨 위로 이동

디자인 다듬기

필요한 테이블, 필드, 관계 등을 결정한 다음에는 테이블을 만들고 예제 데이터로 채운 다음 쿼리 만들기, 새 레코드 추가 등 정보를 사용한 작업을 실행합니다. 이 작업을 통해 문제가 될 수 있는 부분을 강조 표시할 수 있습니다. 예를 들어 디자인 단계에서 삽입하지 못한 열을 추가하거나 두 테이블로 분할하여 중복되는 데이터를 제거해야 하는 테이블이 있을 수 있습니다. 

데이터베이스를 사용하여 원하는 대답을 얻을 수 있는지 확인합니다. 폼과 보고서의 초안을 만들어 원하는 데이터가 표시되는지 확인합니다. 불필요하게 중복되는 데이터가 있는지 확인하고 있으면 삭제합니다.

초기 데이터베이스를 테스트할 때 수정할 부분을 찾을 수 있습니다. 다음과 같은 몇 가지 사항을 확인해야 합니다.

  • 누락된 열은 없습니까? 그렇다면 정보가 기존 테이블에 속합니까? 다른 항목에 대한 정보인 경우에는 다른 테이블을 만들어야 할 수 있습니다. 관리해야 하는 모든 정보 항목에 대한 열을 만드십시오. 다른 열에서 계산할 수 없는 정보가 있으면 해당 정보에 대한 새 열이 필요할 수 있습니다.
  • 기존 필드에서 계산할 수 있는 필요 없는 열이 있습니까? 소매가에서 계산된 할인된 값처럼 기존의 다른 열에서 정보 항목을 계산할 수 있는 경우에는 새 열을 만드는 대신 계산 방법을 사용하는 것이 좋습니다.  
  • 테이블 중 하나에 중복된 정보를 반복해서 입력하지 않았습니까? 그렇다면 일대다 관계가 있는 두 개의 테이블로 해당 테이블을 구분해야 합니다.
  • 테이블에 필드가 너무 많거나, 레코드 수가 제한되어 있거나, 개별 레코드에 빈 필드가 많습니까? 그렇다면 테이블을 새롭게 구성하여 필드 수를 줄이고 레코드 수를 늘려야 합니다.
  • 각 정보 항목이 유용한 가장 작은 부분으로 구분되어 있습니까? 정보 항목을 보고하거나 정렬, 검색 또는 계산해야 하는 경우에는 해당 항목을 고유한 열에 저장하십시오.
  • 각 열에 테이블의 주제에 대한 팩트가 포함되어 있습니까? 열에 테이블의 주제에 대한 정보가 포함되어 있지 않으면 다른 테이블에 속한 것입니다.
  • 테이블 간 관계가 공통 필드 또는 세 번째 테이블을 통해 모두 표시됩니까? 일대일 및 일대다 관계에는 공통 열이 필요하고 다대다 관계에는 세 번째 테이블이 필요합니다.

제품 테이블 조정

제품 판매 데이터베이스의 각 제품이 음료, 조미료, 해산물 같은 일반 분류에 속하는 경우 제품 테이블에는 각 제품의 분류를 보여 주는 필드가 포함될 수 있습니다.

데이터베이스 디자인을 검토하고 조정한 후에는 제품의 이름과 함께 분류에 대한 설명을 저장할 수 있습니다. 제품 테이블에 제품 분류 설명 필드를 추가하면 해당 제품 분류에 속하는 각 제품에 대해 분류 설명을 반복해서 입력해야 합니다. 이 방법은 좋지 않습니다. 

이런 경우 제품 분류를 데이터베이스에서 관리할 새로운 주제로 설정하여 고유한 테이블 및 고유한 기본 키를 만드는 것이 좋습니다. 그런 다음 제품 분류 테이블의 기본 키를 제품 테이블에 외래 키로 추가할 수 있습니다.

제품 분류 테이블과 제품 테이블에 일대다 관계가 설정됩니다. 하나의 제품 분류에 둘 이상의 제품이 포함되지만 한 제품은 하나의 분류에만 속하기 때문입니다.

테이블 구조를 검토할 때는 반복 그룹이 있는지 확인해야 합니다. 예를 들어 다음과 같은 열이 포함된 테이블이 있을 수 있습니다.

  • 제품 번호
  • 이름
  • 제품 번호1
  • 이름1
  • 제품 번호2
  • 이름2
  • 제품 번호3
  • 이름3

여기에서 각 제품은 열 이름의 끝에 번호를 추가하는 방식으로만 다른 열과 구분되는 열의 반복 그룹입니다. 이런 방식으로 번호가 매겨진 열이 있으면 디자인을 다시 고려해야 합니다.

이러한 디자인에는 여러 가지 결점이 있습니다. 처음 사용하는 경우에는 제품 번호에 상한값을 지정해야 합니다. 해당 한계를 초과하면 테이블 구조에 새로운 열 그룹을 추가해야 하는데 이는 중요한 관리 작업입니다.

또 다른 문제는 공급업체에서 제공하는 제품 수가 제품의 최대 번호보다 적을 경우 빈 공간이 생길 수 있으며 추가 열이 비어 있게 됩니다. 이러한 디자인의 가장 심각한 결점은 제품 번호 또는 이름을 기준으로 정렬하거나 인덱싱하는 등의 여러 가지 작업을 실행하는 데 문제가 있다는 것입니다.

반복 그룹이 표시될 때마다 디자인을 자세히 검토하여 테이블을 두 개로 분할하는 것을 고려해야 합니다. 위 예제의 경우 공급업체와 제품에 대해 각각 하나씩 두 개의 테이블을 사용하고 공급업체 번호로 연결하는 것이 좋습니다.

맨 위로 이동 맨 위로 이동

정규화 규칙 적용

디자인의 다음 단계로 데이터 정규화 규칙을 적용할 수 있습니다. 간단하게 정규화 규칙이라고도 합니다. 이 규칙을 사용하여 테이블의 구조가 올바른지 확인할 수 있습니다. 데이터베이스에 규칙을 적용하는 프로세스를 데이터베이스 정규화 또는 간단하게 정규화라고 합니다.

정규화는 모든 정보 항목을 나타내고 기본 디자인에 도달한 후에 가장 유용하게 사용할 수 있습니다. 정보 항목을 적합한 테이블로 구분했는지 확인하려는 경우 정규화를 사용하면 유용합니다. 정규화를 통해 모두 올바른 데이터 항목으로 시작되었는지는 확인할 수 없습니다.

규칙을 연속적으로 적용하고 각 단계에서 디자인이 "기본 폼"에 도달하는지 확인합니다. 첫째 기본 폼에서 다섯째 기본 폼까지 다섯 개의 기본 폼이 널리 사용되지만 이 문서에서는 처음 세 가지 기본 폼에 대해 자세히 설명합니다. 대부분의 데이터베이스 디자인에는 이러한 세 가지 기본 폼만 필요한 경우가 많기 때문입니다. 

첫째 기본 폼

첫째 기본 폼은 테이블에서 모든 행과 열이 교차하는 부분에 값이 여러 개 있는 것이 아니라 하나만 있다는 의미입니다. 예를 들어 단가라는 필드에 둘 이상의 단가를 넣을 수 없습니다. 각 행과 열이 교차하는 부분을 셀이라고 할 경우 각 셀에는 값이 하나만 저장될 수 있습니다.

둘째 기본 폼

둘째 기본 폼에서는 키가 아닌 각 열이 기본 키의 일부가 아니라 전체 기본 키에 완전히 종속되어야 합니다. 이 규칙은 둘 이상의 열로 구성되는 기본 키가 있는 경우에 적용됩니다. 예를 들어 다음과 같은 열을 포함하는 테이블이 있을 경우 주문 번호와 제품 번호가 기본 키를 구성할 수 있습니다.

  • 주문 번호(기본 키)
  • 제품 번호(기본 키)
  • 제품 이름

이 디자인의 경우 제품 이름이 제품 번호에는 종속되지만 주문 번호에는 종속되지 않으므로 전체 기본 키에 종속되지 않습니다. 따라서 둘째 기본 폼에 위배됩니다. 이런 경우 테이블에서 제품 이름을 제거해야 합니다. 이 열은 다른 테이블(제품)에 속합니다.

셋째 기본 폼

셋째 기본 폼에서는 키가 아닌 모든 열이 전체 기본 키에 종속될 뿐만 아니라 서로 독립적이어야 합니다.

즉, 키가 아닌 각 열은 기본 키에 종속되고 해당 기본 키는 유일한 기본 키여야 한다는 의미입니다. 예를 들어 다음과 같은 열이 포함된 테이블이 있을 수 있습니다.

  • 제품 번호(기본 키)
  • 이름
  • 제안 소매가
  • 할인율

할인율이 제안 소매가(SRP)에 종속된다고 가정합니다. 이 테이블은 키가 아닌 열인 할인율이 다른 키가 아닌 제안 소매가 열에 종속되기 때문에 셋째 기본 폼에 위배됩니다. 열 독립이란 다른 열에 영향을 주지 않고 키가 아닌 열을 변경할 수 있어야 한다는 의미입니다. 제안 소매가 필드의 값을 변경하면 할인율 열도 함께 변경되므로 규칙에 위배됩니다. 이 경우 제안 소매가에 대해 키로 지정되는 다른 테이블로 할인율 열을 이동해야 합니다.

맨 위로 이동 맨 위로 이동

추가 정보

테이블 디자인 기본에 대한 자세한 내용은 데이터베이스에 테이블 만들기 문서를 참고하십시오.

데이터베이스 디자인에 대한 추가 정보는 다음 책을 참고하십시오.

  • Hernandez, Michael J. Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design, Second Edition. Addison-Wesley Professional. 2003
  • Fleming, Candace C. von Halle, Barbara. Handbook of Relational Database Design. Addison-Wesley Professional. 1989
  • Riordan, Rebecca M. Designing Effective Database Systems. Addison-Wesley Professional. 2005

맨 위로 이동 맨 위로 이동

 
 
적용 대상:
Access 2007