Hallo Marsi,
danke für deine Hilfe, die man gut nachverfolgen kann.
In dieser Richtung habe ich auch schon ein bißchen denken
können,
habe in 1 Hinsicht aber noch ein Gedankenproblem.
Denke ich mir. Ist ja auch nicht ganz trivial.
Soweit so gut. Ich werde die 3 Kundenstämme mit einer
Extra-Tabelle Kunden verknüpfen.Bloss, wenn ich die KdID nehme
, habe ich das Problem, dass die Keys von KdId´s in den
einzelnen Kundenstämme sich überschneiden können ?
Bsp:
Kundenstamm 1:
KundID: 1
Rabatt: 5%
KundID: 2
Rabatt: 3%
…
Kundenstamm 2:
KundID: 1
Mitarbeiterzahl: 10
KundID: 2
Mitarbeiterzahl: 100
Hier wäre die Frage: Kann ein Kunde gleichzeitig in mehreren Kundenstämmen sein? Datenbanktechnisch sicherlich. Falls semantisch nicht, musst Du das per Programm verbieten. (Oder kann Access am Ende sogar Gültigkeitsüberprüfungen in anderen Tabellen? Keine Ahnung…)
Wenn ich beide in dieser Form zufügen möchte:
Kunden KdStamm1
====== ========
1KdId (Key)11KdId (Key)
Name \ Mitarbeiter
Adresse
\ KdStamm2:
-KdId (Key)
Rabatt
Dann habe ich doch das Problem, dass hier bei den Kundenstämme
2 mal KundID 1 udn 2 auftauchen würde und ich in der Tabelle
Kunden 2 mal die glecih Zahl hätte, was dann nicht als
eindeutiger Schlüssel zu identifizieren wäre.
Hier wäre eher das Problem, dass bei meinem komischen Feld „Kundenstamm“ in der Kundentabelle keine eindeutige Zuordnung zu treffen wäre. Wäre aber auch egal.
Also: Wenn Du in Stamm1 und Stamm2 die gleiche ID hast, heißt das im Klartext, dass es sich um den gleichen Kunden handelt. Hier ist die „Mastertabelle“ die Tabelle Kunden:
1 - Hubermaier
2 - Schmittmüller
3 - Meier
4 - Schulze
Wenn nun die ersten beiden dem Stamm1 angehören, die anderen nicht, so gibt es in Stamm1:
1 - 5%
2 - 3%
Wenn Kunde Meier dem Stamm2 UND Stamm3 angehört (Wie gefragt, kann das sein?), Kunde Schulze nur Stamm2, dann sähen diese Tabellen wie folgt aus:
Stamm2
3 - 50
4 - 100
Stamm3
3 - irgendwasanderes
Wenn Du nun die Kunden NUR aus Stamm1 willst, machst Du das ganz einfach mit einer Equi-Join-Abfrage: SELECT Kunden.*, Stamm1.* FROM Kunden INNER JOIN Stamm1 ON Kunden.Id=Stamm.Id (nicht getestet, musst noch mal genau schauen…). Für die anderen Kundenstämme analog.
Wenn Du alle Kunden haben willst, nimmst Du einen Outer Join (beim Abfrageentwurf Rechtsklick auf die Beziehung, dann „Alle aus Kunden und nur die aus Stamm x, bei denenInhalte gleich sind…“). Dann sähe die Tabelle (ungefiltert) ungefähr so aus:
Id Name Rabatt MA Sonstiges
1 Hubermaier 5% NULL NULL
2 Schmittmüller 3% NULL NULL
3 Meier NULL 50 irgendwas
4 Schulze NULL 100 NULL
Also noch mal zusammenfassend:
Eindeutig ist die Id in der Tabelle Kunden.
Es kann in der Tabelle Stamm x KEINEN Datensatz geben, den es nicht in der Tabelle Kunden gibt. Zuerst muss also der Datensatz in der Tabelle Kunden angelegt sein.
Zu jedem Datensatz aus Kunden KANN es einen Datensatz in einer Stamm-Tabelle geben, muss es aber nicht. Die inhaltliche Bedeutung musst Du programmtechnisch umsetzen (z. B. in GENAU EINER Stammtabelle muss die Id vorhanden sein, nicht in zwei, drei oder keiner).
Daten aus einem Stamm holst Du am einfachsten mit einem Equi Join.
Alle Kundendaten stammübergreifend holst Du mit einem Outer Join.
Ist es nun ein bisschen klarer? Ich hoffe mal… Falls nicht, melde Dich wieder…
Gruß, Manfred