Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Spezialfall: Speicherung einer Liste in einer Spalte - Nachteile?

  Alt 28. Jun 2017, 12:50
Bis zu welcher Normalform du gehst, ist letztendlich deine Entscheidung.
Der erste Schritt wäre:

Tabelle T1
IDNameOthers
1Foo1,25
2Bar3,86
3Baz0,98

Tabelle T2
ID_T1Typ
1A
2A
2B
3A
3B
3C

Wenn zu jedem Typ zusätzliche Daten gehören, würde ich einen Schritt weiter gehen:

Tabelle T1
IDNameOthers
1Foo1,25
2Bar3,86
3Baz0,98

Tabelle T2
ID_T1TypInfo
101AInfoA
102BInfoB
103CInfoC

Tabelle T3
ID_T1ID_T2
1101
2101
2102
3101
3102
3103

Beim Lesen der Daten kommt man trotzdem mit einer Abfrage aus:
Code:
select t1.id, t1.name, t1.Others, t3.id_t2, t2.typ, t.info
from      t1
left join t3 on t3.id_t1 = t1.id
left join t2 on t2.id = t3.id_t2
Delphi-Quellcode:
  while not Query.EOF do
  begin
    if (not Assigned(MyObject)) or (MyObject.ID <> Query.FieldByName('ID').AsInteger) then
    begin
      MyObject := TMyObject.Create;
      MyObject.ID := Query.FieldByName('ID').AsInteger;
      MyObject.Name := Query.FieldByName('Name').AsString;
      {...}
      MyList.Add(MyObject);
    end;
    if Query.FieldByName('ID_T2').AsInteger <> 0 then
    begin
      MyObjectTyp := TMyObjectTyp.Create;
      MyObjectTyp.ID_T1 := Query.FieldByName('ID').AsInteger;
      MyObjectTyp.ID_T2 := Query.FieldByName('ID_T2').AsInteger;
      {...}
      MyObject.Items.Add(MyObjectTyp);
    end;
    Query.Next;
  end;
Der zeitliche Mehraufwand dürfte kaum spürbar sein.

Geändert von Blup (28. Jun 2017 um 16:26 Uhr)
  Mit Zitat antworten Zitat