
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 PlantID
und 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 PlantChemical
hat einen Fremdschlüssel (FK) zur Plant
Tabelle und zur Chemical
Tabelle. Der Fremdschlüssel zur Plant
Tabelle sollte Löschvorgänge kaskadieren, damit Sie eine Anlage problemlos löschen können. Der Fremdschlüssel zur Chemical
Tabelle 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.PlantID
und Chemical.ChemicalID
sollten AutoNumber
Spalten sein.
PlantChemical.PlantID
und PlantChemical.ChemicalID
sollten Numeric Long
Spalten sein.
Lassen Sie den Benutzer in der Benutzeroberfläche eine Pflanze Plant
und mehrere Chemikalien aus der Tabelle auswählen. Fügen Sie für jede dieser Chemikalien einen Datensatz mit den angegebenen und Chemical
in die Verknüpfungstabelle ein .PlantID
ChemicalID
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