1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Betreuer, Kunde, Verträge

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von exzel, 22 März 2011.

  1. exzel

    exzel Datenbank-Guru

    Hallo zusammen,

    ich möchte in einer Datenbank Betreuer, die zugehörigen Kunden und deren Verträge erfassen.

    Doch leider komme ich nicht ganz durch mit dem Design.

    Ich habe die Tabellen betreuer, kunde und vertrag erstellt. In betreuer werden die Daten wie id-betreuer, Telefon, Geburtsdatum, Name oder Vorname des Betreuers festgehalten. In kunden werden id_kunde, Vorname, Name, Ort etc. festgehalten. Und in Verträge natürlich die Vertragsdaten mit der id_vertrag als Primärschlüssel, was in den anderen Tabellen ebenfalls so ist.

    Die Verknüpfung sollte jeweils 1:n sein. Ein Betreuer hat viele Kunden, ein Kunde hat viele Verträge.

    Also wäre für mich der Fall eigentlich klar. Ich erstelle zusätzlich in den Tabellen kunden eine Spalte id_betreuer, um damit die Tabellen betreuer und kunde zu verknüpfen. Und in der Tabelle vertrag eine Spalte id_kunde um die Tabellen vertrag und kunde zu verknüpfen.

    Dann komme ich zwar vom Betreuer auf dessen Kunden und auf deren Verträge, aber wie kann ich direkt vom Betreuer auf die Verträge kommen, die er vermittelt hat?

    Muss ich da eine zusätzliche Tabelle anlegen oder genügt das Datenbankdesign soweit?

    Wie muss ich das machen, damit ich die Normalisierung etc. einhalte?


    Danke und Gruß
     
  2. Charly

    Charly Datenbank-Guru

    Hallo exzel,

    Code:
    SELECT
    
      B.BetreuerID,
      V.VertragID
    
     FROM Betreuer as B
    
    JOIN Kunde AS K ON K.KundeID=B.KundeID
    
    JOIN Vertrag AS V ON V.VertragID=K.VertragID
    
    WHERE B.BetreuerID = 123
    
    
    Die Abfrage zeigt dir alle Verträge des Betreuers.

    Zur Normalisierung schreibe ich Dir heute Abend noch was.
    Jetzt fahre ich erst mal nach hause[​IMG]

    Gruß Charly
     
  3. exzel

    exzel Datenbank-Guru

    Schon einmal vielen Dank für die Antwort!
    Und bitte sag mir, ob die Idee mit den drei Tabellen dann auch so passt :)

    Gruß
     
  4. ukulele

    ukulele Datenbank-Guru

    Von der Logik her einwanfrei.

    Geht auch über
    Code:
    SELECT    *
    FROM    betreuer b,
            kunde k,
            vertraege v
    WHERE    b.id_betreuer = k.id_betreuer
    AND        k.id_kunde = v.id_kunde
     
    Walter gefällt das.
  5. exzel

    exzel Datenbank-Guru

    Na, da bin ich ja beruhigt.

    Angenommen ich würde jetzt noch zusätzlich eine Verbindung zwischen Betreuer und Verträge schaffen, indem ich eine Spalte id_betreuer in der Tabelle vertrag erstelle. Dann hätte ich in der Tabelle vertrag die id_vertrag, id_kunde, id_betreuer. Wäre das dann evtl. ein Verstoß gegen eine Normalform?
    Die Frage ist nur zum besseren Verständnis.

    Gruß
     
  6. ukulele

    ukulele Datenbank-Guru

    Jo wäre es, auch wenn ich jetzt in der Theorie kein Meister bin. Es wäre auf jedenfall eine redundante Information, folglich überflüssig. Natürlich kann sowas technisch hilfreich sein aber notwendig ist es nicht.
     
  7. Charly

    Charly Datenbank-Guru

    Hallo exzel,

    ich schließe mich ukulele an und erkläre Dir noch warum.

    die 3. Normalform sagt das ein Attribut nur vom Schlüssel funktional Abhängig sein darf.
    Wenn Du jetzt noch Betreuer_id in die Vertrag-Tabelle mit aufnimmst ist Betreuer_id funktional abhängig von Kunde_id und dem Schlüssel.

    Du kannst das ganz einfach überprüfen.
    Wenn Du Daten in der Vertrag-Tabelle hast und die Daten nach Kunde_id sortierst und Du jetzt doppelte einträge bei Betreuer_id findest
    hast Du eine funktionale Abhängigkeit von Beteruer_id zu Kunde_id und Betreuer_id muss wieder raus.

    Gruß Charly
     
    Walter gefällt das.
  8. exzel

    exzel Datenbank-Guru

    Na das ist ja mal ein Superforum! Herzlichen Dank für Eure schnelle und freundliche Auskunft!

    Gruß und Dank
     
  9. exzel

    exzel Datenbank-Guru

    Hallo nochmal,

    mir sind doch nochmals Fragen eingefallen.

    Angenommen ich würde die Tabelle kunde und betreuer ohne vertrag verknüpfen und würde folgenden Aufbau in Erwägung ziehen.

    Code:
    Tabelle: Kunden
    id_kunde | name_kunde | vorname_kunde
    1        | meier      | hans
    2        | huber      | fred
    3        | steiger    | alfons
    
    
    Tabelle: Betreuer
    id_betreuer | name    | id_kunde
    1           | großer  | 1
    1           | großer  | 2
    1           | großer  | 3
    
    

    Da haben wir auch wieder Datenredundanz, da pro neuem Kunde in der Tabelle Betreuer eine neue Zeile angelegt werden müsste. Gegen welche Normalform verstößt das?
    Ich hab' dieses Beispiel aus einem anderem Forum und da war die Antwort, das es gegen keine Normalform verstößt, sondern die Beziehung in den Tabellen falsch wäre. Richtig wäre die Beziehung 1:n, also ein Betreuer auf viele Kunden. In dieser Beziehung handelt es sich aber um eine n:m Beziehung.

    Wie seht ihr das?

    Gruß und Dank
     
  10. Charly

    Charly Datenbank-Guru

    Hallo exzel,

    In dieser Beziehung handelt es sich auch um eine 1:N aber die Richtung ist falsch. Der Betreuer ist der Fremdschlüssel im Kunden und nicht der Kunde ist der Fremdschlüssel im Betreuer.

    Also so:

    Tabelle Kunden
    Code:
    id_kunde | id Betreuer | Name_kunde
    1        | 1          | meier
    2        | 1          | huber
    3        | 1          | steiger
    
    
    Gruß Charly
     
  11. exzel

    exzel Datenbank-Guru

    Nochmals danke für die Antwort.

    Was wäre den jetzt, wenn ich Kunden gruppieren müsste? Also z.B. wenn zwei Kunden verheiratet sind. Könnte ich da einfach die Spalte gruppe in der Tabelle kunde hinzufügen und bei den zusammengehörigen Kunden die gleiche Ziffer hinterlegen? Meiner Meinung nach ja, weil ich keinen Verstoß gegen die ersten drei Normalformen sehe. Und die anderen Tabellen können soweit unberührt bleiben, oder?

    Gruß
     
  12. Charly

    Charly Datenbank-Guru

    Hallo exzel,

    Ja

    Ja

    Die Spalte Gruppe dürfte ein Verstoß gegen die 3.NF sein.
    Wenn Du allerdings Adressdaten in Deiner Tabelle hast liegt die Tabelle sowieso nicht mehr in der 3.NF vor.

    Mach Dir deswegen aber keinen Kopf. Die 3.NF ist nicht immer Praxistauglich.

    Gruß Charly
     
  13. exzel

    exzel Datenbank-Guru

    Hallo und danke!

    Dann behalte ich den Aufbau mit drei Tabellen und ergänze die Tabelle kunde um die Spalte gruppe.

    Gruß
     
Die Seite wird geladen...

Diese Seite empfehlen