Access 데이터베이스에서 테이블 간의 관계를 정의하는 방법
원래 KB 번호: 304466
참고
초보자: 단일 사용자 컴퓨터의 사용자 인터페이스에 대한 지식이 필요합니다. 이 문서는 Microsoft Access 데이터베이스(.mdb 또는 .accdb)에만 적용됩니다.
요약
이 문서에서는 Microsoft Access 데이터베이스에서 관계를 정의하는 방법을 설명합니다. 이 문서에는 다음 topics 포함되어 있습니다.
- 테이블 관계가란?
- 테이블 관계의 종류
- 일대다 관계
- 다대다 관계
- 일대일 관계
- 테이블 간의 관계를 정의하는 방법
- 일 대 다 또는 일대일 관계를 정의하는 방법
- 다대다 관계를 정의하는 방법
- 참조 무결성
- 연속 업데이트 및 삭제
- 조인 유형
테이블 관계가란?
관계형 데이터베이스에서 관계를 사용하면 중복 데이터를 방지할 수 있습니다. 예를 들어 책에 대한 정보를 추적하는 데이터베이스를 디자인하는 경우 책의 제목, 출판 날짜 및 출판사와 같은 각 책에 대한 정보를 저장하는 "제목"이라는 테이블이 있을 수 있습니다. 게시자의 전화 번호, 주소 및 우편 번호와 같이 게시자에 대해 저장하려는 정보도 있습니다. 이 모든 정보를 "제목" 테이블에 저장하려는 경우 게시자가 인쇄하는 각 타이틀에 대해 게시자의 전화 번호가 중복됩니다.
더 나은 해결 방법은 게시자의 정보를 "게시자"라고 부르는 별도의 테이블에 한 번만 저장하는 것입니다. 그런 다음 "게시자" 테이블의 항목을 참조하는 포인터를 "Titles" 테이블에 배치합니다.
데이터가 동기화된 상태로 유지되도록 테이블 간에 참조 무결성을 적용할 수 있습니다. 참조 무결성 관계는 한 테이블의 정보가 다른 테이블의 정보와 일치하는지 확인하는 데 도움이 됩니다. 예를 들어 "Titles" 테이블의 각 타이틀은 "Publishers" 테이블의 특정 게시자에 연결되어야 합니다. 데이터베이스에 없는 게시자의 경우 데이터베이스에 제목을 추가할 수 없습니다.
데이터베이스의 논리적 관계를 사용하면 데이터를 효율적으로 쿼리하고 보고서를 만들 수 있습니다.
테이블 관계의 종류
관계는 키 열(일반적으로 두 테이블에서 이름이 같은 열 또는 필드)의 데이터를 일치시켜 작동합니다. 대부분의 경우 관계는 한 테이블에서 다른 테이블의 필드로 각 행에 대한 기본 키 또는 고유 식별자 열을 연결합니다. 다른 테이블의 열을 "외래 키"라고 합니다. 예를 들어 각 책 제목의 판매를 추적하려는 경우 "Titles" 테이블의 기본 키 열( title_ID 호출)과 이름이 title_ID "Sales" 테이블의 열 간에 관계를 만듭니다. "Sales" 테이블의 title_ID 열은 외래 키입니다.
테이블 사이에는 세 가지 종류의 관계가 있습니다. 생성되는 관계의 종류는 관련 열을 정의하는 방법에 따라 달라집니다.
일대다 관계
일대다 관계는 가장 일반적인 관계입니다. 이러한 종류의 관계에서 테이블 A의 행에는 테이블 B에 일치하는 행이 많을 수 있습니다. 그러나 테이블 B의 행에는 테이블 A에 일치하는 행이 하나만 있을 수 있습니다. 예를 들어 "Publishers" 및 "Titles" 테이블에는 일대다 관계가 있습니다. 즉, 각 게시자는 많은 타이틀을 생성합니다. 그러나 각 타이틀은 하나의 게시자에서만 제공됩니다.
관련된 열 중 하나만 기본 키이거나 고유한 제약 조건이 있는 경우 일대다 관계가 만들어집니다.
Access의 관계 창에서 일대다 관계의 기본 키 쪽은 숫자 1로 표시됩니다. 관계의 외래 키 쪽은 무한대 기호로 표시됩니다.
다대다 관계
다대다 관계에서 테이블 A의 행은 테이블 B에 일치하는 행이 많고 그 반대의 경우도 마찬가지입니다. 접합 테이블이라고 하는 세 번째 테이블을 정의하여 이러한 관계를 만듭니다. 접합 테이블의 기본 키는 테이블 A와 테이블 B의 외래 키로 구성됩니다. 예를 들어 "Authors" 테이블과 "Titles" 테이블에는 이러한 각 테이블에서 "TitleAuthors" 테이블까지 일대다 관계로 정의된 다대다 관계가 있습니다. "TitleAuthors" 테이블의 기본 키는 au_ID 열("Authors" 테이블의 기본 키)과 title_ID 열("타이틀" 테이블의 기본 키)의 조합입니다.
일대일 관계
일대일 관계에서 테이블 A의 행은 테이블 B에서 일치하는 행을 둘 이상 가질 수 없으며 그 반대의 경우도 마찬가지입니다. 관련된 두 열이 모두 기본 키이거나 고유한 제약 조건이 있는 경우 일대일 관계가 만들어집니다.
이러한 방식으로 관련된 대부분의 정보는 하나의 테이블에 있기 때문에 이러한 종류의 관계는 일반적이지 않습니다. 일대일 관계를 사용하여 다음 작업을 수행할 수 있습니다.
- 테이블을 여러 열로 나눕니다.
- 보안상의 이유로 테이블의 일부를 격리합니다.
- 수명이 짧고 테이블을 삭제하여 쉽게 삭제할 수 있는 데이터를 저장합니다.
- 기본 테이블의 하위 집합에만 적용되는 정보를 저장합니다.
Access에서 일대일 관계의 기본 키 쪽은 키 기호로 표시됩니다. 외래 키 쪽도 키 기호로 표시됩니다.
테이블 간의 관계를 정의하는 방법
테이블 간에 관계를 만들 때 관련 필드의 이름이 같을 필요는 없습니다. 그러나 기본 키 필드가 AutoNumber 필드가 아니면 관련 필드에는 동일한 데이터 형식이 있어야 합니다. 일치하는 두 필드의FieldSizeproperty가 동일한 경우에만 AutoNumber 필드를 숫자 필드와 일치시킬 수 있습니다. 예를 들어 두 필드의FieldSizeproperty가Long Integer이면 AutoNumber 필드와 숫자 필드를 일치시킬 수 있습니다. 일치하는 필드가 모두 숫자 필드인 경우에도 동일한FieldSizeproperty 설정이 있어야 합니다.
일 대 다 또는 일대일 관계를 정의하는 방법
일대다 또는 일대일 관계를 만들려면 다음 단계를 수행합니다.
모든 테이블을 닫습니다. 열려 있는 테이블 간의 관계를 만들거나 변경할 수 없습니다.
Access 2002 또는 Access 2003에서 다음 단계를 수행합니다.
- F11 키를 눌러 데이터베이스 창으로 전환합니다.
- 도구 메뉴에서 관계를 클릭합니다.
Access 2007, Access 2010 또는 Access 2013에서 데이터베이스 도구 탭의 표시/숨기기 그룹에서 관계를 클릭합니다.
데이터베이스에서 관계를 아직 정의하지 않은 경우 테이블 표시 대화 상자가 자동으로 표시됩니다. 연결하려는 테이블을 추가하려고 하지만 테이블 표시 대화 상자가 표시되지 않으면 관계 메뉴에서 테이블 표시를 클릭합니다.
연결하려는 테이블의 이름을 두 번 클릭한 다음 테이블 표시 대화 상자를 닫습니다. 테이블과 자체 간의 관계를 만들려면 해당 테이블을 두 번 추가합니다.
한 테이블에서 다른 테이블의 관련 필드로 연결하려는 필드를 끌어옵니다. 여러 필드를 끌어오려면 Ctrl 키를 누르고 각 필드를 클릭한 다음 끌어옵니다.
대부분의 경우 기본 키 필드(이 필드는 굵은 텍스트로 표시됨)를 다른 테이블의 외래 키라고 하는 유사한 필드(이 필드는 이름이 같은 경우)로 끕니다.
관계 편집 대화 상자가 나타납니다. 두 열에 표시되는 필드 이름이 올바른지 확인합니다. 필요한 경우 이름을 변경할 수 있습니다.
필요한 경우 관계 옵션을 설정합니다. 관계 편집 대화 상자에서 특정 항목에 대한 정보가 있어야 하는 경우 물음표 단추를 클릭한 다음 항목을 클릭합니다. (이러한 옵션은 이 문서의 뒷부분에서 자세히 설명합니다.)
만들기를 클릭하여 관계를 만듭니다.
연결하려는 각 테이블 쌍에 대해 4~7단계를 반복합니다.
관계 편집 대화 상자를 닫으면 Access에서 레이아웃을 저장할지 여부를 묻습니다. 레이아웃을 저장하든, 레이아웃을 저장하지 않든, 만든 관계는 데이터베이스에 저장됩니다.
참고
테이블뿐만 아니라 쿼리에서도 관계를 만들 수 있습니다. 그러나 참조 무결성은 쿼리와 함께 적용되지 않습니다.
다대다 관계를 정의하는 방법
다대다 관계를 만들려면 다음 단계를 수행합니다.
다대다 관계가 있는 두 테이블을 만듭니다.
세 번째 테이블을 만듭니다. 접합 테이블입니다. 접합 테이블에서 1단계에서 만든 각 테이블의 기본 키 필드와 동일한 정의를 가진 새 필드를 추가합니다. 접합 테이블에서 기본 키 필드는 외래 키로 작동합니다. 다른 테이블에 가능한 한 다른 필드를 접합 테이블에 추가할 수 있습니다.
접합 테이블에서 다른 두 테이블의 기본 키 필드를 포함하도록 기본 키를 설정합니다. 예를 들어 "TitleAuthors" 접합 테이블에서 기본 키는 OrderID 및 ProductID 필드로 구성됩니다.
참고
기본 키를 만들려면 다음 단계를 수행합니다.
디자인 보기에서 테이블을 엽니다.
기본 키로 정의할 필드 또는 필드를 선택합니다. 하나의 필드를 선택하려면 원하는 필드의 행 선택기를 클릭합니다. 여러 필드를 선택하려면 Ctrl 키를 누른 채 각 필드에 대한 행 선택기를 클릭합니다.
Access 2002 또는 Access 2003에서 도구 모음에서 기본 키를 클릭합니다.
Access 2007의 디자인 탭에 있는 도구 그룹에서 기본 키를 클릭합니다.
참고
다중 필드 기본 키의 필드 순서가 테이블의 해당 필드 순서와 달라지도록 하려면 도구 모음에서 인덱스를 클릭하여 인덱스 대화 상자를 표시한 다음 PrimaryKey 인덱스의 필드 이름을 다시 정렬합니다.
각 기본 테이블과 접합 테이블 간의 일대다 관계를 정의합니다.
참조 무결성
참조 무결성은 Access에서 관련 테이블의 레코드 간의 관계가 유효하고 관련 데이터를 실수로 삭제하거나 변경하지 않도록 하는 데 사용하는 규칙 시스템입니다. 다음 조건이 모두 충족되면 참조 무결성을 설정할 수 있습니다.
- 기본 테이블의 일치 필드는 기본 키이거나 고유한 인덱스가 있습니다.
- 관련 필드에는 동일한 데이터 형식이 있습니다. 두 가지 예외가 있습니다.
AutoNumber 필드는 속성 설정이
FieldSize
Long Integer인 숫자 필드와 관련될 수 있으며, 복제 ID의 속성 설정이 있는FieldSize
AutoNumber 필드는 복제 ID의 속성 설정이 있는FieldSize
숫자 필드와 관련될 수 있습니다. - 두 테이블 모두 동일한 Access 데이터베이스에 속합니다. 테이블이 연결된 테이블인 경우 테이블은 Access 형식의 테이블이어야 하며 참조 무결성을 설정하기 위해 저장되는 데이터베이스를 열어야 합니다. 다른 형식의 데이터베이스에서 연결된 테이블에 대해 참조 무결성을 적용할 수 없습니다.
참조 무결성을 사용하는 경우 다음 규칙이 적용됩니다.
- 기본 테이블의 기본 키에 없는 관련 테이블의 외래 키 필드에 값을 입력할 수 없습니다. 그러나 외래 키에 Null 값을 입력할 수 있습니다. 이렇게 하면 레코드가 관련이 없게 지정됩니다. 예를 들어 존재하지 않는 고객에게 할당된 주문은 있을 수 없습니다. 그러나 CustomerID 필드에 Null 값을 입력하여 아무도 할당하지 않는 주문을 가질 수 있습니다.
- 관련 테이블에 일치하는 레코드가 있는 경우 기본 테이블에서 레코드를 삭제할 수 없습니다. 예를 들어 "Orders" 테이블에 직원에게 할당된 주문이 있는 경우 "Employees" 테이블에서 직원 레코드를 삭제할 수 없습니다.
- 해당 레코드에 관련 레코드가 있는 경우 기본 테이블의 기본 키 값을 변경할 수 없습니다. 예를 들어 "주문" 테이블에 해당 직원에게 할당된 주문이 있는 경우 "Employees" 테이블에서 직원의 ID를 변경할 수 없습니다.
연속 업데이트 및 삭제
참조 무결성이 적용되는 관계의 경우 Access에서 관련 레코드를 자동으로 계단식 업데이트 또는 계단식 삭제할지 여부를 지정할 수 있습니다. 이러한 옵션을 설정하면 일반적으로 참조 무결성 규칙에 의해 방지되는 삭제 및 업데이트 작업이 활성화됩니다. 기본 테이블에서 레코드를 삭제하거나 기본 키 값을 변경하는 경우 Access는 참조 무결성을 유지하기 위해 관련 테이블을 변경하는 데 필요합니다.
관계를 정의할 때 연계 업데이트 관련 필드 검사 상자를 선택하려면 기본 테이블에서 레코드의 기본 키를 변경할 때마다 Microsoft Access에서 기본 키를 모든 관련 레코드의 새 값으로 자동으로 업데이트합니다. 예를 들어 "Customers" 테이블에서 고객의 ID를 변경하는 경우 관계가 끊어지지 않도록 "주문" 테이블의 CustomerID 필드가 해당 고객의 모든 주문에 대해 자동으로 업데이트됩니다. 액세스는 메시지를 표시하지 않고 업데이트를 연속합니다.
참고
기본 테이블의 기본 키가 AutoNumber 필드인 경우 AutoNumber 필드의 값을 변경할 수 없으므로 연계 업데이트 관련 필드 검사 상자를 선택하면 효과가 없습니다.
관계를 정의할 때 관련 레코드 검사 삭제 상자를 선택하면 기본 테이블에서 레코드를 삭제할 때마다 관련 테이블의 관련 레코드가 자동으로 삭제됩니다. 예를 들어 "Customers" 테이블에서 고객 레코드를 삭제하면 모든 고객의 주문이 "주문" 테이블에서 자동으로 삭제됩니다. 여기에는 "Orders" 레코드와 관련된 "주문 세부 정보" 테이블의 레코드가 포함됩니다. 관련 레코드 삭제 검사 상자를 선택하면 폼이나 데이터시트에서 레코드를 삭제하면 관련 레코드도 삭제될 수 있음을 경고합니다. 그러나 삭제 쿼리를 사용하여 레코드를 삭제하면 경고를 표시하지 않고 관련 테이블의 레코드가 자동으로 삭제됩니다.
조인 유형
세 가지 조인 유형이 있습니다. 다음 스크린샷에서 볼 수 있습니다.
옵션 1은 내부 조인을 정의합니다. 내부 조인은 조인된 필드의 값이 지정된 조건을 충족하는 경우에만 두 테이블의 레코드가 쿼리 결과에 결합되는 조인입니다. 쿼리에서 기본 조인은 조인된 필드의 값이 일치하는 경우에만 레코드를 선택하는 내부 조인입니다.
옵션 2는 왼쪽 외부 조인을 정의합니다. 왼쪽 외부 조인은 오른쪽 테이블의 조인된 필드에 일치하는 값이 없더라도 쿼리의 SQL 문에 있는 LEFT JOIN 작업의 왼쪽에 있는 모든 레코드가 쿼리 결과에 추가되는 조인입니다.
옵션 3은 오른쪽 외부 조인을 정의합니다. 오른쪽 외부 조인은 왼쪽 테이블의 조인된 필드에 일치하는 값이 없더라도 쿼리의 SQL 문에 있는 RIGHT JOIN 작업의 오른쪽에 있는 모든 레코드가 쿼리 결과에 추가되는 조인입니다.