
Estoy intentando configurar una nueva base de datos de acceso que relacione las plantas con los químicos que contienen. Entiendo que es una relación de muchos a muchos, porque muchas plantas pueden contener la misma sustancia química y la misma planta obviamente puede tener múltiples sustancias químicas. Intenté configurar una tabla de unión y crear una relación de muchos a muchos de esa manera, pero todavía no me queda claro mientras estoy creando la base de datos e ingresando datos, ¿cómo le digo al acceso qué químicos se encuentran en qué plantas? Cualquier ayuda sería muy apreciada ya que necesito comenzar con este proyecto rápidamente.
Respuesta1
El esquema de la base de datos para una relación m-a-n donde cada combinación de planta/químico existe sólo una vez, se ve así:
Table Plant Table Chemical
+-----------+ +--------------+
|PK PlantID | <----+ +---> |PK ChemiclaID |
+-----------+ | Table PlantChemical | +--------------+
| Name | | +---------------------------+ | | Name |
| | +----o|PK FK PlantID | | | |
| | |PK FK ChemicalID |o---+ | |
+-----------+ +---------------------------+ +--------------+
| Percentage (optional)|
| |
| |
+---------------------------+
Es decir, en la tabla de unión la clave principal (PK) consta de PlantID
y ChemicalID
, porque desea asignar cada producto químico sólo una vez a una planta determinada. Una planta todavía puede tener muchas sustancias químicas y una sustancia química todavía puede asignarse a muchas plantas.
La tabla de unión PlantChemical
tiene una clave externa (FK) para la Plant
tabla y para la Chemical
tabla. La clave externa de la Plant
tabla debe eliminar en cascada, de modo que pueda eliminar fácilmente una planta. La clave externa de la Chemical
tabla debenoeliminaciones en cascada, porque no debería poder eliminar una sustancia química que contiene una planta.
Es una buena idea tener un índice único de nombres de plantas y químicos para acelerar las búsquedas y evitar entradas duplicadas.
en Access Plant.PlantID
y Chemical.ChemicalID
deben ser AutoNumber
columnas.
PlantChemical.PlantID
y PlantChemical.ChemicalID
deberían ser Numeric Long
columnas.
En la interfaz de usuario, permita al usuario seleccionar una planta de la Plant
tabla y varios productos químicos de la Chemical
tabla. Para cada uno de estos químicos, inserte un registro en la tabla de unión con los datos PlantID
y ChemicalID
.
Luego el usuario seleccionará otra planta y hará lo mismo allí.
Respuesta2
Supongamos la tabla Plant con clave principal PlantId y la tabla Chemical con clave principal ChemicalId.
La tabla PlantChemical tendría dos columnas: PlantId y ChemicalId. Debe haber un índice en cada una de estas columnas, NO un índice único, ya que el propósito son varias entradas para cada planta y cada producto químico, y desea ir de planta a producto químico (como la consulta de ejemplo a continuación que necesita un índice en PlantId) y también de Chemical a Plant (por lo que necesita un índice en ChemicalId). Por lo tanto, es posible que desee colocar una columna AutoIncrment como clave principal (yo lo haría).
Luego puedes relacionar los dos con 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 puede ser una sintaxis incorrecta para Access. Recuerdo que Access tiene opiniones sobre el orden de los nombres de las columnas en las partes de las uniones, pero no tiene…. Access ahora mismo.0