
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 PlantID
e 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 PlantChemical
possui uma chave estrangeira (FK) para a Plant
tabela e para a Chemical
tabela. A chave estrangeira da Plant
tabela deve ser excluída em cascata, para que você possa excluir facilmente uma planta. A chave estrangeira da Chemical
tabela 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.PlantID
e Chemical.ChemicalID
devem ser AutoNumber
colunas.
PlantChemical.PlantID
e PlantChemical.ChemicalID
devem ser Numeric Long
colunas.
Na IU, deixe o usuário selecionar uma planta da Plant
tabela e vários produtos químicos da Chemical
tabela. Para cada um desses produtos químicos, insira um registro na tabela de junção com o PlantID
e 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