Autor Beitrag
OliverN_26
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Do 26.04.12 11:18 
Hi

Ich hab des öfteren Datenbankkonstrukte gesehen, wo mehrere Parameter in einem einzigen Datenbankfeld stehen (Feld 'params' im anhängenden Bild). Dabei ist 'params' vom Typ "TEXT".

1. Frage: Macht so was Sinn oder ist es Systemlastig?
2. Frage: Wie greife ich denn am einfachsten auf die jeweiligen Parameter zu? Gibt es da einen Trick?

Ich frage, weil ich genau diese Möglichkeit bräuchte, in der ich mehrere optionale Parameter in ein Feld schreiben kann.

Danke

lg
Oli
Einloggen, um Attachments anzusehen!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 26.04.12 13:14 
Macht absolut keinen Sinn. Da wir ja schon gegen die erste Normalform verstoßen. Für solche Konstrukte muss schon eine sehr sehr sehr gute Begründung haben (mir fällt kein Scenario, wo sowas sinnvoll wäre). Wenn jemand sowas bei uns abliefert würde, würde ich das übern Haufen werfen lassen.

Für sowas macht man eine Untertabelle. Primärschlüssel: Primärschlüssel der Haupttabelle + Parametername. Dazu ein Feld "Parameterwert".
Das kannst Du dann ordentlich mit SQL abfragen, ohne das erst händisch parsen zu müssen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Do 26.04.12 13:39 
Da ne Untertabelle mit einem Primärschlüssel anzulegen ist mir klar. Hab ich ja sonst auch immer gemacht. Die Frage ist halt ob es in meinem jetzigen Fall auch anders gehen würde, da ne Menge Datensätze geschrieben werden.

Zum Problem: Ich arbeite an einer "kleinen", internen Warenwirtschaft. Wir sind ein Elektro-Unternehmen und haben über 100 Techniker mit jeder Menge Material draussen rumfahren. Bei der Warenausgabe wird genau festgehalten welches Material auf welchen Techniker gebucht wird. Nun möchte ich natürlich nicht zu jedem Artikel+Techniker einen Datensatz schreiben, sondern viel lieber jede Warenausgabe als eigenständigen Vorgang in die Datenbank speichern. Das heisst Techniker "XY" hat heute "DIESE" Ware bekommen. Und "DIESE" Artikel dachte ich mir als Parameter in ein Feld schreiben zu lassen, da ich sonst für jeden Artikel den ich auf den Techniker buche einen Datensatz schreiben muss. Da kommt bei der Artikelanzahl und über 100 Techniker täglich einiges an Datensätzen zusammen.

Wie bereits erwähnt .. ist nur eine Frage ob man das nicht in diese Richtung optimieren kann, da ich das schon des öfteren gesehen habe.

Danke

LG
Oli
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Do 26.04.12 13:49 
Und morgen möchte Dein Chef wissen, wie viele Meter Kabel in der letzten Woche an die Techniker rausgegeben wurden.

Bei dem System mit der Parameterliste musst Du alle Warenausgaben lesen, parsen, prüfen, ob "Kabel" drin vorkommt und die Menge aufsummieren. Das bekommst Du nicht performant hin. Und je mehr Daten Du hast, desto länger wird das dauern. Und übermorgen möchte er die Kabelmenge für das komplette Geschäftsjahr wissen, damit er mit seinen Lieferanten bessere Preise verhandeln kann. Wie lange würde es bei dem System dauern, bis alle aufsummiert ist??

Bei dem System mit der Untertabelle reicht ein SELECT SUM(MENGE) FROM TECHNIKER_WAREN WHERE WARE = 'KABEL' AND DATUM = (TODAY - 1);. Fertig.

Das Argument, dass Du nicht zu viele Datensätze schreiben willst, zieht bei heutigen Datenbanksystemen nicht mehr. Du handelst Dir damit nur Ärger ein. Irgendwann fällt Dir das auf die Füße. Und große Datenmengen sind für heutigen Datenbanksysteme kein Problem. Wenn die DB richtig designed ist.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
OliverN_26 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 252

Win7 64-Bit, WinXP SP3
Delphi 7 Enterprise
BeitragVerfasst: Do 26.04.12 13:54 
Danke .. klingt einleuchtend

LG
Oli