Announcement

Collapse
No announcement yet.

Verknüpfung von zwei Tabellen mit variablen Beziehungen zueinander

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verknüpfung von zwei Tabellen mit variablen Beziehungen zueinander

    Hallo,

    ich habe folgende Situation:
    Tabelle A mit drei Spalten:
    Spalte 1 = fortlaufender Primärschlüssel von A1 bis An
    Spalte 2 = Bezeichnung
    Spalte 3 = Betrag in EUR

    Tabelle B mit drei Spalten:
    Spalte 1 = fortlaufender Primärschlüssel von B1 bis Bn
    Spalte 2 = Bezeichnung
    Spalte 3 = Betrag in EUR

    Nun will ich einen Bezug der beiden Tabellen herstellen.
    Das Problem ist, dass es dabei drei mögliche Situationen gibt.
    a) eine Position aus Tabelle A entspricht genau einer Position aus Tabelle B
    b) eine Position aus Tabelle A ist aufzuteilen auf mehrere Positionen der Tabelle B
    c) eine Position aus Tabelle B ist aufzuteilen auf mehrere Positionen der Tabelle A


    Ich benötige dann eine Auswertung die sagt
    I) Welche Positionen aus Tabelle A keinen Bezug zu Tabelle B haben + Ausgabe der Summe der Beträge
    II) Welche Positionen aus Tabelle B keinen Bezug zu Tabelle A haben + Ausgabe der Summe der Beträge
    III) Eine Übersicht der Positionen mit Beziehungen zueinander + Beträge


    Vielen Dank für die Hilfe
    Zuletzt editiert von guenther_rene; 22.12.2010, 13:02.

  • #2
    Dafür brauchst du zunächst mal eine dritte Tabelle für die Beziehungen. Diese Tabelle hat dann 2 Spalten, in der ersten steht immer die A_Id und in der zweiten immer die B_Id. Wenn du diese zwei Spalten als PK festlegst, gibt es auch keine gleichen Paare (es kann also die Id 1 aus A nur einmal mit Id 1 aus B verknüpft werden). Und wenn das angelegt ist und die Beziehungen eingetragen, dann bastelst du deine Selects unter Zuhilfenahme von "Join", "exists" und/oder "except" usw., je nachdem welche Datenbank du verwendest.

    bye,
    Helmut

    Comment


    • #3
      Hallo,
      also dritte Tabelle habe ich mir auch schon gedacht.
      Aber es reichen doch nicht zwei Spalten die jeweils PK sind,
      wenn es eine Beziehung der oben beschriebenen Variante b oder c gibt. Oder?


      Originally posted by guenther_rene View Post
      b) eine Position aus Tabelle A ist aufzuteilen auf mehrere Positionen der Tabelle B
      c) eine Position aus Tabelle B ist aufzuteilen auf mehrere Positionen der Tabelle A
      benötige ich doch n viele Spalten oder n viele Zeilen um die Beziehung zueinander zu beschreiben.

      z.B.
      A1 -> B1 -> B2 -> B3 -> B4

      oder
      A1 -> B1
      A1 -> B2
      A1 -> B3
      A1 -> B4
      (geht nicht wenn beide Spalten PK sind. Oder?)

      Comment


      • #4
        das letzte Beispiel ist genau richtig. Das wäre dann ein zusammengesetzter PK. Zwei unterschiedliche Spalten können nicht PK sein, wenn dann sind sie ein zusammengesetzter PK. Ich würde dann allerdings empfehlen eine dritte Spalte mit einem eindeutigen PK einzuführen anstatt zusammengesetzte PKs zu verwenden. Auf die beiden Spalten die die Beziehung darstellen kann man einen Unique Constraint setzen, dann kann jede Verknüpfung nur einmal auftreten.
        Der Vorteil davon ist, dass wenn du in Zukunft auf eine der Verknüpfungen verweisen möchtest, dann musst du nicht den zusammengesetzten PK durch Deine ganze Datenbank schleifen, sondern kannst direkt die eindeutige ID verwenden -> deutlich saubereres Design

        Comment


        • #5
          In diesem Fall würde ich persönlich eindeutig den zusammengesetzten PK wählen anstatt eine dritte Spalte dafür zu nehmen und dann in anderen Datensätzen bei einem erforderlichen Verweis statt zwei direkt lesbaren Spalten eine Spalte mit einer ID zu haben, mit der ich dann extra in einer anderen Tabelle nachlesen muss. Aber das ist Geschmackssache. "Deutlich sauberer" wird es wegen der zusätzlichen ID meines Erachten in diesem Fall nicht.

          bye,
          Helmut

          Comment

          Working...
          X