Microsoft 액세스에서 다대다 관계로 작업하는 방법은 무엇입니까?

Microsoft 액세스에서 다대다 관계로 작업하는 방법은 무엇입니까?

저는 식물과 그 식물에 포함된 화학물질에 관한 새로운 접근 데이터베이스를 구축하려고 합니다. 나는 이것이 다대다 관계라는 것을 이해합니다. 많은 식물이 동일한 화학 물질을 포함할 수 있고 동일한 식물이 분명히 여러 화학 물질을 포함할 수 있기 때문입니다. 나는 접합 테이블을 설정하고 그런 식으로 다대다 관계를 만들려고 노력했지만 데이터베이스를 구축하고 어떤 식물에 어떤 화학 물질이 있는지 어떻게 알 수 있는지 데이터를 입력할 때 여전히 명확하지 않습니다. 이 프로젝트를 빨리 진행해야 하므로 도움을 주시면 대단히 감사하겠습니다.

답변1

각 식물/화학 조합이 한 번만 존재하는 m-n 관계에 대한 데이터베이스 스키마는 다음과 같습니다.

Table Plant                                                     Table Chemical
+-----------+                                                   +--------------+
|PK PlantID | <----+                                      +---> |PK ChemiclaID |
+-----------+      |     Table PlantChemical              |     +--------------+
|   Name    |      |     +---------------------------+    |     |   Name       |
|           |      +----o|PK FK PlantID              |    |     |              |
|           |            |PK FK ChemicalID           |o---+     |              |
+-----------+            +---------------------------+          +--------------+
                         |      Percentage (optional)|
                         |                           |
                         |                           |
                         +---------------------------+

즉, 접합 테이블에서 기본 키(PK)는 PlantID및 로 구성됩니다 ChemicalID. 왜냐하면 각 화학 물질을 특정 플랜트에 한 번만 할당하려고 하기 때문입니다. 식물에는 여전히 많은 화학 물질이 있을 수 있으며, 화학 물질은 여전히 ​​많은 식물에 할당될 수 있습니다.

접합 테이블에는 테이블과 테이블에 대한 PlantChemical외래 키(FK)가 있습니다 . 테이블 에 대한 외래 키는 계단식으로 삭제되어야 식물을 쉽게 삭제할 수 있습니다. 테이블 의 외래 키는 다음과 같습니다.PlantChemicalPlantChemical~ 아니다계단식 삭제는 식물에 포함된 화학물질을 삭제할 수 없어야 하기 때문입니다.

검색 속도를 높이고 중복 항목을 피하기 위해 식물 및 화학 이름에 대한 고유한 색인을 갖는 것이 좋습니다.

Access에서는 열 Plant.PlantID이어야 Chemical.ChemicalID합니다 AutoNumber.

PlantChemical.PlantID그리고 열 PlantChemical.ChemicalID이어야 합니다 Numeric Long.


UI에서는 사용자가 Plant표에서 식물 하나를 선택하고 표에서 여러 화학 물질을 선택하도록 합니다 Chemical. 이러한 화학물질 각각에 대해 주어진 PlantID및 가 있는 접합 테이블에 하나의 레코드를 삽입하십시오 ChemicalID.

그런 다음 사용자는 다른 식물을 선택하고 그곳에서도 동일한 작업을 수행합니다.

답변2

기본 키 PlantId가 있는 Plant 테이블과 기본 키 ChemicalId가 있는 Chemical 테이블을 가정합니다.

테이블 PlantChemical에는 PlantId 및 ChemicalId라는 두 개의 열이 있습니다. 이러한 각 열에는 인덱스가 있어야 합니다. 목적은 각 플랜트 및 각 화학 물질에 대한 여러 항목이고 플랜트에서 화학 물질로 이동하려고 하기 때문에 고유한 인덱스가 아닙니다(아래 예제 쿼리에서는 PlantId에 대한 인덱스가 필요함). 또한 화학에서 플랜트까지(따라서 ChemicalId에 대한 색인이 필요함) 따라서 AutoIncrment 열을 기본 키로 넣을 수도 있습니다.

그런 다음 두 가지를 다음과 같이 연관시킬 수 있습니다.

select *
from Plant p
inner join PlantChemical pc on pc.PlantId = p.PlantId
inner join Chemical c om c.ChemicalId = pc.ChemicalId

(이것은 Access의 잘못된 구문일 수 있습니다. Access는 조인 부분의 열 이름 순서에 대한 의견을 가지고 있지만 .... 지금은 액세스할 수 없습니다.0

관련 정보