Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   suche nach SQL Schulungsunterlagen (https://www.delphipraxis.net/187201-suche-nach-sql-schulungsunterlagen.html)

jobo 6. Nov 2015 13:38

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von Hansa (Beitrag 1320762)
Wieso soll es bei verkauften Produkten Ärger geben ? Genau darum geht es bei mir. Die Parameter betreffen auch hauptsächlich die Where-Klausel. Die Datenmenge soll ja von Anfang an gering gehalten werden.

Und die 150 Zeilen kommen in meinem Beispiel nur zustande, weil es eben um 12 Monate geht. Ergibt halt solche Konstrukte (hier 1 Monat und das mal 12 + Where + Var.-Deklarationen) :

Code:
    SUM (CASE MONAT WHEN 1 Then
           CASE :WERTTYP
             WHEN 0 THEN MENGE
             WHEN 1 THEN UMSATZ
             ...geht bis 4
           ELSE
             0
         END
         ELSE 0 END) as Mon1,

Ja, das seh ich auch so, Deine 12 Monate sind 12 feste Spalten. Die Datenreduktion erfolgt auch, ob bei der Aggregation jetzt 10 oder 150 Sätze rauskommen, ist ja wurscht, Hauptsache es kommt nicht die unaggregierte Menge zurück.
Ich saug mir mal ein Beispiel aus den Fingern: Der Kunde möchte eine Pivotmatrix des Umsatzes über alle Produktkategorien, die eine bestimmte Umsatzgrenze übersteigen je Filiale. Die Produktkategorien kann er natürlich selber vergeben. Das Ergebnis ist hier in beiden Dimensionen variabel, Anzahl und Name (sagen wir Standort) der Filialen ist beliebig und Anzahl der Kategorien und deren Name auch. Das kann eine SQL Engine nicht direkt, selbst wenn sie eine Pivotimplementierung hat. Also gut, ich kenne zumindest keine.
Und so wird es unkomfortabel und Du landest bei dynamischen SQL, SP oder nicht, wie auch immer.

Hansa 6. Nov 2015 14:32

AW: suche nach SQL Schulungsunterlagen
 
Du meinst also, was man machen soll, wenn nicht mal die Struktur des Ergebnisses bekannt ist ? Ja, dann nützt eine fest in der DB befindliche SP natürlich wirklich nichts oder zumindest wenig. So etwas sollte man dann eben tatsächlich in Delphi zusammenbauen, ist am einfachsten. Aber dann auch mit Parametern. Mit den SPs, das sieht bei mir so aus : wenn ich die Anzahl der Tabellen und die der SPs (Stored Procedures) vergleiche, dann muss ich feststellen, das die SPs doppelt so häufig vorhanden sind. Schätze deshalb mal, dass die, die von diesem Wert weit abweichen (z.B. 50 Tabellen und nur 10 SPs), sich mal um die DB kümmern sollten. 8-) Ich habe aber auch schon mal gesehen, dass Programm 80 Tabellen braucht und ich keine einzige SP finde. Auf Nachfrage wurde mir dann gesagt, dass sie die tatsächlich nicht verwenden. :shock:

Um nicht zu weit abzuschweifen:

http://www.firebirdsql.org/file/docu...grefupd25.html

Da mal selber suchen.

waldforest 6. Nov 2015 14:59

AW: suche nach SQL Schulungsunterlagen
 
Hallo,
auch wenn ich nach Schulungsunterlagen suche, bringt mich die geführte Diskussion auch schon weiter, ich hoffe sie geht weiter, oder macht es Sinn ein eigenes Thread einzustellen um sich der Aufgabe separat zu widmen ?

Hansa 6. Nov 2015 15:24

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von waldforest (Beitrag 1320774)
Hallo,
...bringt mich die geführte Diskussion auch schon weiter, ich hoffe sie geht weiter, oder macht es Sinn ein eigenes Thread einzustellen um sich der Aufgabe separat zu widmen ?

Das ist immer besser. Schliesslich ist ja die Frage nach Schulungsunterlagen ziemlich untergegangen. Auch dank meiner Mithilfe. :mrgreen: Formuliere besser die Frage/Titel neu und mache neues Thema auf.

jobo 6. Nov 2015 17:02

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von waldforest (Beitrag 1320774)
bringt mich die geführte Diskussion auch schon weiter, ich hoffe sie geht weiter

Ok, also meine Kurzfassung zu SP:
Lohnt sich eher, wenn ein statisches Ergebnis (Spaltengerüst) erwartet wird oder
wenn die Sprachmächtigkeit im SP code genutzt werden kann/muss (z.B. für Pivot) oder
wenn so die Datenkonsistenz wegen Normalformverletzung einfacher zu halten ist (insert, update, delete auf mehreren Tabellen plus Prüfungen)

ansonsten tut's vielleicht eher ein View

oder man nimmt tatsächlich eine Zwischenschicht, wie Sir Rufo vorgeschlagen hat (Das endbindet einen natürlich nicht von der Performancefrage bzw. die gilt von der Zwischenschicht aus gegen den DB Server genauso wie vom Client aus)

Sir Rufo 6. Nov 2015 17:17

AW: suche nach SQL Schulungsunterlagen
 
So eine Zwischenschicht ist schon Klasse und die damit gewonnene Flexibilität relativiert auch den größeren Initialaufwand für die Zwischenschicht.

Diesen Mehraufwand am Anfang sollte man aber nicht ausser Acht lassen. So eine Zwischenschicht gibt es eben nicht auf Knopfdruck. Und ein einfaches Durchreichen von SQL-Statements ist dann auch keine wirkliche Zwischenschicht, bzw. führt diese eigentlich wieder ad absurdum, denn die Flexibilität ist damit wieder weg.

IBExpert 7. Nov 2015 09:19

AW: suche nach SQL Schulungsunterlagen
 
von mir auch noch mal ein paar Anmerkungen

1. Es muss am Ende (zumindest bei Firebird) nicht die eierlegende Wollmilchsau in Form einer Stored Procedure sein. Gerade wenn es dynamisch ist, bietet es sich an, aus Delphi heraus modular einen möglichen Stored Procedure Quelltext zusammenzustellen und den dann als execute block auszuführen. Dafür ersetzt man nur die erste Zeile in der Deklaration.

Das bietet die gleichen Geschwindigkeiten wie eine SP, verhindert aber das man sich ein Monstrum schafft, mit dem man alle Fälle abdeckt. Ein Execute Block kann eigene Variablen haben, die Anzahl der Rückgabefelder kann dynamisch sein, man kann GTT benutzen, ohne anderen in die Quere zu kommen, man muss keine globalen Namen definieren, hat den gesamten Sprachumfang von SPs, kann die in IBExpert debuggen usw.

Wenn man Blöcle die dynamisch zusammenstellt, sollte man die am besten einfach in einer Tabelle speichern mit Laufzeit, dann weiss man relativ schnell, wo die eigene Logik vielleicht nicht ganz so doll ist.

Und zum Ausführen reicht in Delphi nahezu jede TxQuery oder TxSQL Komponente, die sich mit einer SQL Property steuern lässt.

2. Zum Thema Speed: Bei großen Datenmengen unterschätzen auch erfahrene Delphi Programmierer den Geschwindigkeitsvorteil, den SP oder Blöcke bringen. Mit sehr viel Glück und optimaler Programmierung kann eine Delphi Anwendung von einem Firebird Server die Ergebnisse von 1000-2000 Operationen pro Sekunde abarbeiten. Operation sind dabei individuelle insert/update/delete/select statements, die ggf. mit unterschiedlichen Parametern ausgeführt werden. In einer SP bzw einem Block sind 50000 bis 100000 Operationen pro Sekunde keine Zauberei.

Ich hab bei diversen Kunden Auswertungen gesehen, die in Grids oder Reporttools gemacht wurden, wo die Laufzeit nicht mehr nur im Bereich von Minuten waren. Die ergebnisidentische Umsetzung als SP/Block war dann oft in wenigen Sekunden fertig.

Das der Speed dann natürlich auch noch möglichst auf datenbankgeeignete Hardware angewiesen ist und nicht durch Virtualisierung und externe RAID Storagesysteme verlangsamt wird, sollte dann eh klar sein (ist es aber meiner Erfahrung nach leider nicht).

jobo 7. Nov 2015 14:29

AW: suche nach SQL Schulungsunterlagen
 
@blöcke und sp:
Also wenn ein Select oder View nicht ausreicht (von den Sprachmöglichkeiten), kann man via Block oder SP häufig noch was rausholen, weil es mehr Möglichkeiten bietet, besonders natürlich wenn es um Datenmanipulation auf mehreren Tabellen geht.
Blöcke würde ich gemäß Client /Server Prinzip da nicht unbedingt vorziehen, außer man hat das, was sie tun genauso gründlich geprüft und unter Kontrolle, wie die SP, die man definiert hat. Klar sind sie flexibler und bieten performancemäßig den "Servervorteil" genau wie eine SP, aber sie bergen auch mehr Risiko für Fehler.

Was den Performancegewinn angeht, der ist natürlich potentiell unendlich, wenn es vorher schlecht genug umgesetzt war. Solche Aussagen finde ich nicht unbedingt hilfreich.

Am Ende kann man ja vielleicht auch bunt mischen, wahrscheinlich meinst Du das auch mit "modular".
SP für gesicherte, robuste DM Operationen und Blöcke für flexible (Business)Operationen, die sich für Core OP der definierten SP bedienen.

mkinzler 7. Nov 2015 14:40

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Was den Performancegewinn angeht, der ist natürlich potentiell unendlich, wenn es vorher schlecht genug umgesetzt war. Solche Aussagen finde ich nicht unbedingt hilfreich.
Ein komplizierter Pivot von großen Tabellen, welcher komplett am Client erfolgt, erfordert meist eine signifikant größere Datenmenge, welche übertragen werden muss.

Zitat:

Am Ende kann man ja vielleicht auch bunt mischen, wahrscheinlich meinst Du das auch mit "modular".
SP für gesicherte, robuste DM Operationen und Blöcke für flexible (Business)Operationen, die sich für Core OP der definierten SP bedienen.
Ich vermute mal mit flexibel meinte er eine Pivotabfrage einfach um Felder erweitern zu können.

jobo 7. Nov 2015 15:27

AW: suche nach SQL Schulungsunterlagen
 
Zitat:

Zitat von mkinzler (Beitrag 1320827)
Zitat:

Was den Performancegewinn angeht, der ist natürlich potentiell unendlich, wenn es vorher schlecht genug umgesetzt war. Solche Aussagen finde ich nicht unbedingt hilfreich.
Ein komplizierter Pivot von großen Tabellen, welcher komplett am Client erfolgt, erfordert meist eine signifikant größere Datenmenge, welche übertragen werden muss.

Ja klar, es geht mir nur um diese Legenden ala nimm eine SP und es rennt. Und die Leute wundern sich, dass die gleichen schlechten Verfahren in einer SP dann auch nicht (viel) schneller sind.


Zitat:

Zitat von mkinzler (Beitrag 1320827)
Zitat:

Am Ende kann man ja vielleicht auch bunt mischen, wahrscheinlich meinst Du das auch mit "modular".
SP für gesicherte, robuste DM Operationen und Blöcke für flexible (Business)Operationen, die sich für Core OP der definierten SP bedienen.
Ich vermute mal mit flexibel meinte er eine Pivotabfrage einfach um Felder erweitern zu können.

Ich hatte IBExpert eher so verstanden, dass er von "frei zusammengestellten" Blöcken sprach, entgegen einer überfrachteten AllPurposeSP, unabhängig vom Pivotthema.
Aber das kann er ja vielleicht selber noch erläutern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz