Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

1 Tabelle mit 3 Untertabellen / Beziehung überhaupt eindeutig?

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von andrerink, 7 Mai 2012.

  1. andrerink

    andrerink Neuer Benutzer

    Hallo,

    ich stehe bei einem kleinen selbstangedachten Projekt vor einem Grundsatzproblem.
    Ich habe ein Tabelle line. In der stehen Informationen zu einer Leitung. Dort sind die Endpunkte angegeben und auch die Art der Leitungstechnologie.

    Es gibt 3 verschiedende Leitungstechnologien. Jeder Endpunkt hat aber immer nur eine Leitungstechnik. AccessTyp_A kann also nur technologie 1, technologie 2 oder technologie 3 sein. Da die Technologien an sich aber unterschiedliche Attribute haben kann ich bzw. will ich die nicht in die line Tabelle einfügen und habe daher für jede der Technologien eine eigene Tabelle erstellt.
    Problem: Wenn ich nun den Leitungstyp in das Feld AccessTyp_A oder B schreibe habe ich ja keine eindeutige Zuordnung. Wenn ich z.B. über die id's referenziere, kann ja die id in tech 1, tech 2 oder tech 3 gemeint sein?
    Meine erste Überlegung war noch ein Attribut in die line Tabelle zu setzen was den Namen der Technik wiederspiegelt, aber ich glaube nicht das dies die beste Lösung ist

    Wie würde eurere Meinung nach eine saubere Lösung aussehen?
     

    Anhänge:

  2. Charly

    Charly Datenbank-Guru

    Hallo andrerink,

    Dein Ansatz ist richtig. Du hast eine line Tabelle, die ist der Supertyp, in der werden alle allgemeinen Informationen einer Leitung gespeichert.
    Als nächstes erzeugst Du Subtypen in denen Informationen gespeichert werden die nicht in jeder Leitung vorhanden sind opder voneinander abweichen. Je nachdem wieviele Varianten es gibt legt man dann zwei oder mehr Tabellen an. Man kann auch eine Baumstruktur entwerfen.

    Nur zum Beispiel:

    Computer kann man in Tragbar und Stationär unterteilen.
    Tragbar kann man in Notebook, Netbook, Smartphone, etc. unterteilen.

    Die Umsetzung ist relativ einfach. Die Tabellen werden mit 1:1 Beziehungen verbunden. Der Primärschlüssel hat immer den gleichen Namen.

    Für Deine Tabellen würde das so aussehen:

    Line{LineID, AccessTyp, etc....}
    Leitungstechnologie1{LineID,Attribut1, etc...}
    Leitungstechnologie2{LineID,Attribut2, etc...}
    Leitungstechnologie3{LineID,Attribut3, etc...}

    Wobei LineID in allen Tabellen der Primärschlüssel ist.

    Beim Einfügen von Datensätzen wird immer nur in die Subtabelle ein Datensatz eingefügt aus der man die Attribute braucht.

    Beispiel: Eine neuer Endpunkt mit Leitungstechnologie1.

    Zuerst wird ein Datensatz in die Line-Tabelle eingefügt:

    INSERT INTO Line (LineID, AccessTyp,) Values (1 , <AccessTyp>)

    Dann werden in die Leitungstechnologie1-Tabelle die Attribute für den Endpunkt eingetragen:

    INSERT INTO Leitungstechnologie1(LineID, Attribut1) Values (1 , <Attribut1>)

    Beim Abfragen werden einfach alle 3 Subtabellen nach LineID1 abgefragt und nur in der Leitungstechnologie1-Tabelle wird ein Wert gefunden.
    Um zu verhinden das in mehrere Subtabellen die gleiche ID eingetragen wird sollte man das Einfügen über eine Prozedur laufen lassen.

    Gruß Charly
     
    PLSQL_SQL gefällt das.
  3. andrerink

    andrerink Neuer Benutzer

    Danke für den Tip. Jetzt habe ich aber folgendes Problem.
    Meine Leitungstechnologien sind festegelgt. Nehmen wir mal Leitungstechnologie 1 und mach es konkreter
    Leitungstechnologie 1 hat folgende Einträge

    [id,typ]
    1, adsl
    2, vdsl
    3, sdsl

    Jetzt nehmen wir mal an ich lege eine neue Leitung an und will für den Punkt A der Leitung den Leitungstyp auswählen. Hier werde ich dann eine Abfrage über alle meine Leitungstechnologietabellen machen damit ich dann die passende Technologie auswählen kann. Die ausgewählte Information kommt dann ja in die Tabelle line wo der Accesstyp hinterlegt ist. Hier wäre z.B. die 2 für vdsl hinterlegt.

    Nur hätte ich die 2 ja auch in den Tabellen leitungstechnologie 2 und 3. Wie kann ich denn jetzt noch im Nachgang die richtige Tabelle ansprechen?
     
  4. Charly

    Charly Datenbank-Guru

    OK ich versuchs nochmal,

    Dann hast Du also eine Line Tabelle in die nur eine ID für die Leitungstechnologie rein soll?

    Dann geht es vieleicht so:

    Line{LineID,LT_ID, etc...}

    Ich kürze mal mit LT ab:)

    LT{LT_ID, GemeinsamesAttribut, etc....}
    LT1{LT_ID,Attribut1, etc...}
    LT2{LT_ID,Attribut2, etc...}
    LT3{LT_ID,Attribut3, etc...}

    Alles was die Leitungstechnologien gemeinsam haben kommt in die LT-Tabelle (z.B. der Name)
    Alles was die Technologien unterscheidet kommt in dei Subtabellen.
    Damit kannst Du dann die verschiedenen Attribute von LT1, LT2 und LT3 abbilden.

    Sonst alles so wie oben.

    Hoffe ich habe das jetzt richtig verstanden.

    Gruß Charly
     
    Walter und PLSQL_SQL gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden