wie arbeitet man mit vielen-zu-vielen-Beziehungen in Microsoft Access?

wie arbeitet man mit vielen-zu-vielen-Beziehungen in Microsoft Access?

Ich versuche, eine neue Access-Datenbank einzurichten, die Pflanzen mit den darin enthaltenen Chemikalien in Beziehung setzt. Mir ist klar, dass es sich um eine Viele-zu-viele-Beziehung handelt, da viele Pflanzen dieselbe Chemikalie enthalten können und dieselbe Pflanze offensichtlich mehrere Chemikalien enthalten kann. Ich habe versucht, eine Verknüpfungstabelle einzurichten und auf diese Weise die Viele-zu-viele-Beziehung herzustellen, aber während ich die Datenbank aufbaue und Daten eingebe, ist mir immer noch nicht klar, wie ich Access mitteile, welche Chemikalien in welchen Pflanzen enthalten sind. Für jede Hilfe wäre ich sehr dankbar, da ich mit diesem Projekt schnell loslegen muss.

Antwort1

Das Datenbankschema für eine m-zu-n-Beziehung, bei der jede Pflanzen-/Chemikalienkombination nur einmal vorkommt, sieht folgendermaßen aus:

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

D. h., in der Verbindungstabelle besteht der Primärschlüssel (PK) aus PlantIDund ChemicalID, da Sie jede Chemikalie nur einmal einer bestimmten Anlage zuordnen möchten. Eine Anlage kann trotzdem viele Chemikalien enthalten und eine Chemikalie kann trotzdem vielen Anlagen zugeordnet werden.

Die Verbindungstabelle PlantChemicalhat einen Fremdschlüssel (FK) zur PlantTabelle und zur ChemicalTabelle. Der Fremdschlüssel zur PlantTabelle sollte Löschvorgänge kaskadieren, damit Sie eine Anlage problemlos löschen können. Der Fremdschlüssel zur ChemicalTabelle solltenichtKaskadenlöschungen, da es nicht möglich sein sollte, eine in einer Pflanze enthaltene Chemikalie zu löschen.

Um die Suche zu beschleunigen und doppelte Einträge zu vermeiden, empfiehlt es sich, einen eindeutigen Index für die Pflanzen- und Chemikaliennamen zu haben.

in Access Plant.PlantIDund Chemical.ChemicalIDsollten AutoNumberSpalten sein.

PlantChemical.PlantIDund PlantChemical.ChemicalIDsollten Numeric LongSpalten sein.


Lassen Sie den Benutzer in der Benutzeroberfläche eine Pflanze Plantund mehrere Chemikalien aus der Tabelle auswählen. Fügen Sie für jede dieser Chemikalien einen Datensatz mit den angegebenen und Chemicalin die Verknüpfungstabelle ein .PlantIDChemicalID

Anschließend wählt der Benutzer eine andere Anlage aus und führt dort dasselbe aus.

Antwort2

Nehmen wir die Tabelle „Plant“ mit dem Primärschlüssel „PlantId“ und die Tabelle „Chemical“ mit dem Primärschlüssel „ChemicalId“ an.

Die Tabelle PlantChemical hätte zwei Spalten: PlantId und ChemicalId. Für jede dieser Spalten sollte ein Index vorhanden sein – KEIN eindeutiger Index, da der Zweck mehrere Einträge für jede Anlage und jede Chemikalie sind und Sie von Anlage zu Chemikalie wechseln möchten (wie die Beispielabfrage unten, die einen Index für PlantId benötigt) und auch von Chemikalie zu Anlage (also wird ein Index für ChemicalId benötigt). Sie möchten also möglicherweise eine AutoIncrment-Spalte als Primärschlüssel einfügen (das würde ich tun).

Sie können die beiden dann mit etwas wie verknüpfen

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

(Dies ist möglicherweise eine falsche Syntax für Access. Ich erinnere mich, dass Access Meinungen zur Reihenfolge der Spaltennamen in den Teilen der Verknüpfungen hat, aber nicht …. Access im Moment.0

verwandte Informationen