Einzelnen Beitrag anzeigen

Headbucket

Registriert seit: 12. Dez 2013
Ort: Dresden
172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Spezialfall: Speicherung einer Liste in einer Spalte - Nachteile?

  Alt 28. Jun 2017, 12:03
Datenbank: SQLite • Version: 3.14.1 • Zugriff über: FireDAC
Hallo,

angenommen ich habe folgende Tabelle 1:

NameTypOthers
FooA1,25
BarA;B3,86
BazA;B;C0,98

Zur Zeit speichere ich eine Art Liste in einer einzigen Spalte (Typ) einer Tabelle einer SQLite Datenbank. Das man das nicht tun sollte ist mir bekannt, weshalb ich gerade dabei war das ganze umzustricken:
Erstellung zwei weiterer Tabellen:
- Tabelle 2: Enhält alle möglichen Einträge der Liste (A, B, C, ...)
- Tabelle 3: Enthält die Zuordnung Listeneintrag und Haupttabelle (Foo, A) (Bar, A) (Bar, B) (...)

Nun stelle ich mir aber die Frage, ob es nicht in ganz konkreten Anwendungsfällen doch sinnvoll ist eine Liste in einer einzelnen Spalte abzuspeichern.

Ich habe nämlich zur Zeit folgenden Anwendungsfall:
- Laden der kompletten Tabelle 1 (unbedingt notwendig und auch in Zukunft so)
- Erstellung einer echten Liste in Delphi aus Spalte "Typ"
- fertig

Würde ich die Datenbank nach "Lehrbuch" erstellen dann sähe mein Ablauf folgendermaßen aus:
- Laden der kompletten Tabelle 1
- Laden der kompletten Tabelle 3 und Zuordnung zu den Einträgen aus Tabelle 1
- fertig

Gefühlt sollte die zweite Variante DEUTLICH länger dauern, da ich dort ja extrem viele Abfragen an die Datenbank stellen muss. Bei meiner aktuellen Umsetzung ist es nur eine einzige Abfrage (SELECT * FROM Tabelle 1)
Keine Frage: Würde ich nur Elemente von Typ C auslesen wollen, dann wäre die zweite Variante deutlich schneller, denn ich müsste nicht die komplette Tabelle 1 auslesen. Wenn ich aber sowieso die komplette Tabelle 1 auslesen muss - dann sollte das doch die schnellste Version sein?

Das Auslesen ist leider sehr zeitkritisch, weshalb ich unbedingt so effektiv wie möglich sein möchte. Natürlich gefällt mir Variante 2 besser. Wenn ich dadurch aber statt 1 Sekunde 5 Sekunden brauche dann geht das einfach nicht.

Ich hoffe alles war einigermaßen verständlich.

Ich bedanke mich schonmal!

Grüße
Headbucket
  Mit Zitat antworten Zitat