como trabalhar com muitos para muitos relacionamentos no acesso da Microsoft?

como trabalhar com muitos para muitos relacionamentos no acesso da Microsoft?

Estou tentando criar um novo banco de dados de acesso relacionando as plantas aos produtos químicos que elas contêm. Eu entendo que é uma relação muitos para muitos, porque muitas plantas podem conter a mesma substância química, e a mesma planta pode obviamente ter múltiplas substâncias químicas. Tentei configurar uma tabela de junção e criar o relacionamento muitos para muitos dessa forma, mas ainda não está claro para mim, pois estou construindo o banco de dados e inserindo os dados, como digo ao acesso quais produtos químicos estão em quais plantas? Qualquer ajuda seria muito apreciada, pois preciso prosseguir com este projeto rapidamente.

Responder1

O esquema do banco de dados para uma relação m para n, onde cada combinação planta/produto químico existe apenas uma vez, é semelhante a este:

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

Ou seja, na tabela de junção a chave primária (PK) consiste em PlantIDe ChemicalID, porque se deseja atribuir cada produto químico apenas uma vez a uma determinada planta. Uma planta ainda pode ter muitos produtos químicos e um produto químico ainda pode ser atribuído a muitas plantas.

A tabela de junção PlantChemicalpossui uma chave estrangeira (FK) para a Planttabela e para a Chemicaltabela. A chave estrangeira da Planttabela deve ser excluída em cascata, para que você possa excluir facilmente uma planta. A chave estrangeira da Chemicaltabela devenãoexclusões em cascata, porque você não deveria ser capaz de excluir uma substância química que uma planta contém.

É uma boa ideia ter um índice exclusivo dos nomes das plantas e dos produtos químicos para agilizar as pesquisas e evitar entradas duplicadas.

no Access Plant.PlantIDe Chemical.ChemicalIDdevem ser AutoNumbercolunas.

PlantChemical.PlantIDe PlantChemical.ChemicalIDdevem ser Numeric Longcolunas.


Na IU, deixe o usuário selecionar uma planta da Planttabela e vários produtos químicos da Chemicaltabela. Para cada um desses produtos químicos, insira um registro na tabela de junção com o PlantIDe fornecido ChemicalID.

O usuário irá então selecionar outra planta e fazer o mesmo lá.

Responder2

Suponha a tabela Plant com chave primária PlantId e a tabela Chemical com chave primária ChemicalId.

A tabela PlantChemical teria duas colunas: PlantId e ChemicalId. Deve haver um índice em cada uma dessas colunas - NÃO um índice único, pois o objetivo são múltiplas entradas para cada planta e cada produto químico, e você deseja ir de planta para produto químico (como exemplo de consulta abaixo que precisa de um índice no PlantId) e também de Chemical to Plant (por isso precisa de um índice em ChemicalId). Então você pode querer colocar uma coluna AutoIncrment para ser a chave primária (eu faria).

Você pode então relacionar os dois com algo como

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

(Esta pode ser uma sintaxe incorreta para o Access. Lembro-me que o Access tem opiniões sobre a ordem dos nomes das colunas nas partes on das junções, mas não tenho…. Acesse agora.0

informação relacionada