1 Tabelle mit 3 Untertabellen / Beziehung überhaupt eindeutig?

andrerink

Neuer Benutzer
Beiträge
4
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

  • beziehung.JPG
    beziehung.JPG
    23 KB · Aufrufe: 4
Werbung:
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
 
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?
 
Werbung:
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
 
Zurück
Oben