AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

Offene Frage von "Aviator"
Ein Thema von Aviator · begonnen am 29. Sep 2016 · letzter Beitrag vom 30. Sep 2016
Antwort Antwort
Seite 2 von 2     12   
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 05:29
Was genau meinst du mit Berechnungen und Abhängigkeiten? Sowas wird ja dann normalerweise auf Programmebene und nicht in der Datenbank gemacht. Oder verstehe ich da jetzt etwas grundlegend falsch?

genau. Und hier macht es eben einen großen Unterschied ob du da mit Queries hantieren musst:

  summe := qryRechnung.FieldByName('Skonto').AsCurrency * qryPosition.FieldByName('Anzahl').AsCurrency * qryPosition.FieldByName('Einzelpreis').AsCurrency; oder ob du Objekte zur Verfügung hast

  summe := Rechnung.Skonto * Positon.Anzahl * Position.Einzelpreis; daher: Nimm dir ein, zwei Tage Zeit und schau dir die Thematik an.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 07:20
Mein Senf:
SP sind nicht aus Prinzip schneller. Sie vermeiden am ehesten Datentransport zum Client. Wenn das so ist, sind sie schneller.
Arbeitet ein Client "mühsam" per Schleife, irgendwelche Updates oder sowas durch, ist es per SP schneller.
Ein reines Select per SP ist nicht schneller, es ist eigentlich genau das gleiche.

Freiheiten bei Modelländerungen erhält man nicht nur durch SP, sondern auch durch die Nutzung von Views, statt (komplexen) SQL Anweisungen.

Das Thema Testing und Testdaten sehe ich so, dass es am besten in der DB aufgehoben ist. Gerade SP und ein paar Scripte und die Nutzung von Transaktionen (Commit/Rollback) erlauben es, extrem schnell und viel Testdaten zu generieren und Tests zu durchlaufen. Im Zweifel sogar im laufenden Betrieb (kann man sich vielleicht firmenintern erlauben, natürlich hat man normalerweise Testsysteme dafür)

SP lohnen sich m.E. vor allem dann, wenn man die Fähigkeiten der DB ausreizen will und die können recht groß sein, zb. auch bei MS SQL, wenn ich das richtig verstanden habe.
Insbesondere das Thema DMS stelle ich mir hier ganz spannend vor, weil es auf einem MS Server mit MS Dokumentensoftware (also Word und Excel und Co) ziemlich viel serverseitige Dienste erlaubt.

Ansonsten vielleicht doch eher ORM oder ein "fertiges" OpenSource System erweitern.

P.S:Wenn mal ein weiteres Clientsystem hinzukommen soll, bspw. Webportal Extranet DMS, dann sind SP natürlich sehr gut geeignet.
Gruß, Jo

Geändert von jobo (30. Sep 2016 um 07:32 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 09:17
Was genau meinst du mit Berechnungen und Abhängigkeiten? Sowas wird ja dann normalerweise auf Programmebene und nicht in der Datenbank gemacht. Oder verstehe ich da jetzt etwas grundlegend falsch?

genau. Und hier macht es eben einen großen Unterschied ob du da mit Queries hantieren musst:

  summe := qryRechnung.FieldByName('Skonto').AsCurrency * qryPosition.FieldByName('Anzahl').AsCurrency * qryPosition.FieldByName('Einzelpreis').AsCurrency; oder ob du Objekte zur Verfügung hast

  summe := Rechnung.Skonto * Positon.Anzahl * Position.Einzelpreis; daher: Nimm dir ein, zwei Tage Zeit und schau dir die Thematik an.
Hmm. Muss ich mir dann doch mal anschauen. Bisher habe ich mir immer direkt meine eigenen Klassen geschrieben und die Daten dann dort in einzeln angelegten Objekten gespeichert. Hatte den Vorteil, dass ich sehr einfach darauf zugreifen konnte.

Mit Feldern aus einer Query arbeite ich schon lange nicht mehr. Viel zu Umständlich. Eine Klasse hat eben zusätzlich noch die nette Eigenschaft, dass ich eine Funktion aufrufen kann, die die Daten direkt aufbereitet so wie ich sie benötige.

Freiheiten bei Modelländerungen erhält man nicht nur durch SP, sondern auch durch die Nutzung von Views, statt (komplexen) SQL Anweisungen.
Bei Views habe ich eben das Problem, dass ich keine Filter von außen mitgeben kann. Eine View ist ja soweit ich weiß statisch. Bei einer SP kann ich noch Parameter angeben welche dann in einer WHERE Klausel verarbeitet werden können. Bei meinem DMS wüsste ich nicht, welche Daten ich ohne Filter einfach so selektieren kann. Außer eventuell alle angelegten Benutzer um auf einem LoginScreen diese in einer Combobox anzeigen zu lassen.

Wenn ich jetzt gezielter drüber nachdenken würde, dann würden sich bestimmt noch die ein oder anderen Abfragen finden die per View erstellt werden könnten, aber so spontan fällt mir da nicht mehr ein. Aber Views sind nicht per se aus meinem Konzept gestrichen. Da wo ich sie benutzen kann, da werde ich sie auch nutzen.

Das Thema Testing und Testdaten sehe ich so, dass es am besten in der DB aufgehoben ist. Gerade SP und ein paar Scripte und die Nutzung von Transaktionen (Commit/Rollback) erlauben es, extrem schnell und viel Testdaten zu generieren und Tests zu durchlaufen. Im Zweifel sogar im laufenden Betrieb (kann man sich vielleicht firmenintern erlauben, natürlich hat man normalerweise Testsysteme dafür)

SP lohnen sich m.E. vor allem dann, wenn man die Fähigkeiten der DB ausreizen will und die können recht groß sein, zb. auch bei MS SQL, wenn ich das richtig verstanden habe.
Insbesondere das Thema DMS stelle ich mir hier ganz spannend vor, weil es auf einem MS Server mit MS Dokumentensoftware (also Word und Excel und Co) ziemlich viel serverseitige Dienste erlaubt.

Ansonsten vielleicht doch eher ORM oder ein "fertiges" OpenSource System erweitern.

P.S:Wenn mal ein weiteres Clientsystem hinzukommen soll, bspw. Webportal Extranet DMS, dann sind SP natürlich sehr gut geeignet.
Mit MSSQL liegst du richtig. Siehe meinen Ausgangspost.

An ein Webportal ist aktuell noch nicht zu denken. In unserer Firma arbeiten 100% der Benutzer an einem Windows PC. Mit Tablets oder Smartphones á la BYOD haben wir hier noch nix am Hut. Rein aus sicherheitstechnischen Gründen.

Ich muss aber zugeben das ich bereits daran gedacht habe, irgendwann mal eine App zu entwickeln um ebenfalls darauf zuzugreifen. Da ich die Anwendung aus diversen Gründen mit der VCL entwickele, müsste da sowieso ein separates Projekt werden. Somit hat das dann auch noch Zeit.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 09:52
Wiese ist ein View statisch?

Nehmen wir an:
create view Koeln as select * from Kunden where ort = 'Köln' Dann kannst du doch darauf eine Abfrage machen:
select * from Koeln as select * from Kunden where name = 'Müller' Ein View ist doch nichts weiter, als ein in der Datenbank abgelegtes, mehr oder weniger komplexes SQL-Statement zur Abfrage von Daten, das immer wieder benutzt werden kann.

Flappsig formuliert ist für mich ein View nix weiter, als ein Shortcut auf ein in der Datenbank abgelegtes Selectstatement.

Bei einer Abfrage der View wird letztlich dieses SQL ausgeführt und die entsprechende Ergebnismenge geliefert.

Wenn Du willst kannst Du auch per SQL mehrere View joinen ...

Zum eher Grundsätzlichen:

Bei einem leistungsstarken Datenbanksystem halte ich die Nutzung von SPs ... für deutlich effektiver. Gerade bei großen Datenmengen (zigtausende oder Millionen von Datensätzen) müssen diese nicht zum Client und verändert wieder zurück. Änderungen kann man per Trigger protokollieren ...

Ebenso Logiken, die bei der Einfügung neuer Datensätze in die Datenbank, ausgeführt werden müssen. (Ebenso natürlich auch beim Update oder Delete.)

Meine praktische Erfahrung aus der Vergangenheit unter C++ und Oracle ist die: Je mehr Logik in der Datenbank implementiert war, um so schneller liefen die Jobs ab.
Es ging hierbei um Datenmengen von 100ten Millionen Datensätzen in 'nem recht komplexen Datenmodell.
Die Zeitersparnis lag da im Bereich von Stunden und ab und an auch mal ein paar Tagen.

Meine persönliche Regel ist: Alles was die Datenbank machen kann, macht die Datenbank.
Außerhalb der Datenbank wird nur das erledigt, was mit Mitteln der Datenbank nicht umzusetzen ist.

So gerne ich mit Delphi programmiere. Das Delphiprogramm übernimmt nur die Teile, die die Datenbank nicht erledigen kann. Ggfls. per Benutzeroberfläche den Anstoß der SPs ..., um bestimmte Aufgaben zum von Benutzer manuell bestimmten Zeitpunkt auszuführen ...

Regelmäßig auszuführende Aufgaben, die die Datenbank selbständig ausführen kann, werden mit der datenbankeigenen "Prozesssteuerung" geplant und überwacht.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 11:50

Freiheiten bei Modelländerungen erhält man nicht nur durch SP, sondern auch durch die Nutzung von Views, statt (komplexen) SQL Anweisungen.
Wenn ich jetzt gezielter drüber nachdenken würde, dann würden sich bestimmt noch die ein oder anderen Abfragen finden die per View erstellt werden könnten, aber so spontan fällt mir da nicht mehr ein. Aber Views sind nicht per se aus meinem Konzept gestrichen. Da wo ich sie benutzen kann, da werde ich sie auch nutzen.
Ok, die Sache mit "Statisch" ist ja schon geklärt.
Was Du eingangs von den SP geschrieben hast, mit denen Du alles kapseln kannst, wäre dann konsequent zu Ende gedacht/gemacht, wenn alle Datenquellen aus Prinzip als View angelegt werden.
Code:
create table document (...);
create view iDocument as Select ... from document;
Wäre der erste Schritt.
Verfeinerungen, die direkt bestimmte gejointe Daten liefern, wäre der nächste.
Verstecken von Modelländerungen usw. wäre dann irgendwann später dran. Das ist sicher nicht das primäre Ziel.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.413 Beiträge
 
Delphi 12 Athens
 
#6

AW: [SQL] - Stored Procedure bzw. Funktion vs. Direktabfrage

  Alt 30. Sep 2016, 13:25
Ich weiß nicht, ob es hier bereits genannt wurde, aber zusätzlich kannst Du mittels SP auch besser Rechte vergeben - je nach Schema-Rechte kann man einen Nutzer dann beschränken, welche Daten er sehen/ändern kann. Laut BSI, sollten Nutzer gar keinen direkten Zugriff auf Daten bekommen, sondern immer mittels Views/SP bedient werden.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz