Entwickler-Ecke

Datenbanken - Mehrere Parameter in ein Datenfeld ?


OliverN_26 - Do 26.04.12 11:18
Titel: Mehrere Parameter in ein Datenfeld ?
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


Nersgatt - 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.


OliverN_26 - 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 - 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.


OliverN_26 - Do 26.04.12 13:54

Danke .. klingt einleuchtend

LG
Oli