Juli 14, 2020, 20:23:08

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


mehrdeutige Beziehung zwischen Tabellen

Begonnen von SSSleep, Juni 23, 2020, 10:20:03

⏪ vorheriges - nächstes ⏩

SSSleep

Hallo,

vorab, bin ich mir unsicher, ob der Betreff des Themas richtig gewählt ist. Ich versuche es einmal zu beschreiben.

Ich habe eine kleine Datenbank, in der ich Mitarbeiter mit Standorten verknüpfe. Dazu gibt es eine Tabelle mit den Mitarbeitern, sowie eine weitere Tabelle mit den Locations. Dazwischen eine Beziehung. Nun würde ich der Tabelle Mitarbeiter gerne noch ein weiteres Feld hinzufügen, welches den vorherigen Standort des Mitarbeiter kennzeichnet. Dazu müsste ich mit diesem Feld dann, erneut, mit der Tabelle Locations verknüpfen. Ab da funktioniert es dann nicht mehr, weil die Beziehung nicht mehr eindeutig ist.

So würde das ganze dann aussehen:



Lässt sich mein vorhaben überhaupt auf diesem Wege lösen?

Vielen Dank

ebs17

ZitatNun würde ich der Tabelle Mitarbeiter gerne noch ein weiteres Feld hinzufügen, welches den vorherigen Standort des Mitarbeiter kennzeichnet.
Ich würde eher Standorte und Mitarbeiter per m:n verbinden. In der resultierenden Verknüpfungstabelle kann man dann mehr als zwei Standorte zum Mitarbeiter anlegen, die man z.B. mit zusätzlichen Angaben (von, bis) besser qualifizieren kann. Da wären dann auch Hauptstandort und Nebenkriegsschauplatz parallel darstellbar.

Nebenbei: Beziehungen ohne eingestellte referentielle Integrität haben keine funktionale Wirkung, sie bieten nur optische Informationen. Auf RI wird man bestmöglich nicht verzichten wollen.
Mit freundlichem Glück Auf!

Eberhard

SSSleep

Hallo Eberhard,

dein Beispiel macht Sinn, danke. Ich muss allerdings gestehen, dass die Darstellung nur als Beispiel gedacht war. ;) 

Ich habe häufiger die Situation, dass ich Tabellen nur dafür nutze, um Textbeschreibung vorzuhalten. Das klappt soweit auch ganz gut, allerdings komme ich dann jedesmal in Verlegenheit, wenn ich aus einem Datensatz mehrfach auf die selbe Textbeschreibung zugreifen möchte. Nur gibt es dafür eine Möglichkeit damit umzugehen? Vielleicht ist die Abbildung über Beziehungen auch nicht Sinnvoll?

Ich könnte mir auch vorstellen über Kriterien innerhalb von Abfragen auf die Textbeschreibung zu verlinken. Wäre das eine Möglichkeit? 
   
vielen Dank

ebs17

Juni 23, 2020, 16:31:53 #3 Letzte Bearbeitung: Juni 23, 2020, 16:37:40 von ebs17
Zitataus einem Datensatz mehrfach auf die selbe Textbeschreibung zugreifen
Ich verstehe nicht wirklich das Problem. Schon mit einer 1:n-Beziehung hätte man Zugriff auf mehrere Texte, und man hat wie gebraucht keine Notwendigkeit, bei Erweiterung von bspw. 2 auf 7 Texte eine Umprogrammierung inklusive Tabellenstrukturen vornehmen zu müssen. Letzteres können sich nur jene leisten, die langfristig jederzeit Tag und Nacht Zeit für ihre Kunden haben und billigst (umsonst) und schnellstens reagieren und arbeiten können.
In der Praxis stellt sich das so dar: Wenn man wegen ein paar zusätzlicher Daten neu-/umprogrammieren muss, hat man im Vorfeld etwas falsch gemacht.

Für eine Darstellung nebeneinander wird man dann eine Abfrage entsprechend formulieren. Mit Plan und vorgedachter Struktur wird das auch nur einmal erfolgen müssen.

Die Variante, die Du oben zeigst, würde man für Hierarchien verwenden (Direktor, Leiter, Mitarbeiter / Eltern, Kind). Für die Verarbeitung von mehreren Ebenen braucht man aber Prozeduren/Rekursion - etwas, was Jet-SQL (Dialekt von Access) nicht beherrscht. Dort müsste man dann per VBA Schleifen einbauen.
Mit freundlichem Glück Auf!

Eberhard

SSSleep

Zitat von: ebs17 am Juni 23, 2020, 16:31:53
Zitataus einem Datensatz mehrfach auf die selbe Textbeschreibung zugreifen
Ich verstehe nicht wirklich das Problem.

Vermutlich bin ich an der Stelle das Problem.

Zitat von: ebs17 am Juni 23, 2020, 16:31:53Die Variante, die Du oben zeigst, würde man für Hierarchien verwenden (Direktor, Leiter, Mitarbeiter / Eltern, Kind). Für die Verarbeitung von mehreren Ebenen braucht man aber Prozeduren/Rekursion - etwas, was Jet-SQL (Dialekt von Access) nicht beherrscht. Dort müsste man dann per VBA Schleifen einbauen.

Ok...ok, die Variante war halt ein unglücklich gewähltes Beispiel. :-[   

Zitat von: ebs17 am Juni 23, 2020, 16:31:53Für eine Darstellung nebeneinander wird man dann eine Abfrage entsprechend formulieren. Mit Plan und vorgedachter Struktur wird das auch nur einmal erfolgen müssen.

Ja, ich denke darauf wird es herauslaufen. Könntest du mir in diese Richtung noch eine Starthilfe geben, bitte.


ebs17

ZitatStarthilfe
Eine Abfrageformulierung ist sehr stark von den gegebenen Umständen abhängig. Ich unterstelle hier genau zwei Datensätze pro Fremdschlüssel.
Diese Abfrage könnte man nun mit der Primärtabelle verknüpfen:
SELECT
   T1.ID_f,
   T1.Text AS Alt,
   T2.Text AS Neu
FROM
   tblDetails AS T1
      INNER JOIN tblDetails AS T2
      ON T1.ID_f = T2.ID_f
         AND
      T1.ID < T2.ID
Mit freundlichem Glück Auf!

Eberhard

SSSleep

Irgendetwas fehlt mir noch zum Verstehen. Ich habe versucht dein Beispiel nachzuvollziehen. Grafisch sieht es dann so aus:



die zugehörige SQL Syntax ist sehr ähnlich zu deiner:

SELECT
    T1.ID_f,     
    T1.Text AS Alt,
    T2.Text AS Neu
FROM
    tblDetails AS T1
       INNER JOIN tblDetails AS T2
       ON T1.ID_f = T2.ID_f;

Für mich ist noch nicht erkennbar, wie mich das zur Lösung führt. Gehen wir vielleicht von völlig unterschiedlichen Voraussetzungen aus?

Entschuldige, wenn ich deine Geduld so strapaziere. :-[ 

ebs17

Zitatnicht erkennbar, wie mich das zur Lösung führt
Lösung wofür?

Mein Versuch zeigt, wie man Inhalte aus zwei Datensätzen einer Tabelle auf eine Zeile bringt - in Nachahmung der beiden Fremdschlüssel in Deinem Eingangsbeitrag.

Man könnte aber auch sagen: Es ist nur ein Beispiel ...
Mit freundlichem Glück Auf!

Eberhard

SSSleep

Juni 29, 2020, 09:31:29 #8 Letzte Bearbeitung: Juni 29, 2020, 09:36:04 von SSSleep
Hi,

bezogen auf mein Beispiel habe ich habe es jetzt so gelöst bekommen:

SELECT
         members.Mitarbeiter,
         t2.Stadt,
         location_1.Stadt
FROM
           location AS t2 INNER JOIN (location AS location_1
                 INNER JOIN members
                 ON location_1.ID = members.Standort_neu)
           ON t2.ID = members.Standort_alt;



Vielen Dank für deinen Denkanstoß

VG

Ralf

doa115

Hallo zusammen,

ich würde gerne nochmals auf die ursprüngliche Frage von SSSleep zurück kommen.

Wenn ich es richtig verstehe soll ja eine referentielle Integrität zwischen der Mitarbeiter-Tabelle und den Lokationen aufgebaut werden und zwar einmal über das Feld Standort_aktuell als auch noch über Standort_alt.
Mir ist nicht klar warum das nicht direkt gehen sollte. Man kann doch eine Referenz von Members.Standort_aktuell zu Location.ID und zusätzlich von Members.Standort_alt zu Location.ID aufbauen.

In Access kann ich dies ja einfach unter Database Tools Relationships definieren. Was natürlich am Anfang etwas verwirrt ist die Darstellung von Access, es wird so dargestellt als ob plötzlich eine weitere Tabelle Location existieren würde. Dies ist aber nur ein optisches Problem, in Wirklichkeit gibt es keine zweite Tabelle. Dies kann man auch daran sehen indem man aus dem Relationships-Fenster den Kopf der optisch zweiten Tabelle Location_1 mit rechter Maustaste anklickt und auf Table Design geht: es wird die Tabelle Location geöffnet und nicht Location-1. Ist die Sache erst mal definiert hat man natürlich dann die Vorteile der Datenintegrität zwischen den referenzierten Tabellen und Vorteile wie Lookup-Zugriff usw.

Aber vielleicht bin ich mit meinen Gedanken auf einem völlig falschen Pfad.

Gruß
Albert

Beaker s.a.

Hallo Albert,
Dann hast du aber keine Möglichkeit weitere Daten zu einer MA/SA-Kombination
zu erfassen; - siehe Eberhards Post vom 23-06-2020, 10:23:52
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

doa115

Hallo, du hast recht. Ich hatte aber den Eindruck die erste Frage zielte auch dahin, dass aus einer Tabelle heraus nicht über mehrere Felder auf eine andere Tabelle mehrfach referenziert werden kann.

Gruß
Albert