4 Stimmen

Gespeicherte Prozeduren oder Inline-Abfragen?

Zunächst einmal gibt es eine Teilfrage aber das ist nicht genau das, worum ich bitte, also haben Sie Geduld mit mir und machen Sie weiter.

Meine Frage ist, nachdem ich gesehen habe, was SubSonic und die hervorragenden Videos von Rob Connery muss ich fragen: Sollen wir ein Tool wie dieses verwenden und Inline-Abfragen durchführen oder sollen wir die Abfragen machen mit einen Aufruf an die gespeicherte Prozedur?

Ich möchte nicht jede Arbeit von Rob (die ich denke, es ist erstaunlich) zu minimieren, aber ich möchte nur Ihre Meinung zu dieser Ursache, die ich brauche, um ein neues Projekt zu starten, und ich bin in der Mitte der Linie; soll ich SubSonic (oder andere wie Werkzeug, wie NHibernate) oder ich nur meine Methode, die immer eine gespeicherte Prozedur aufrufen, auch wenn es eine einfache als ist

Select this, that from myTable where myStuff = StackOverflow;

2voto

John Sheehan Punkte 75473

Es muss nicht das eine oder das andere sein. Wenn es sich um eine einfache Abfrage handelt, verwenden Sie das Abfragetool SubSonic. Wenn es komplexer ist, verwenden Sie eine gespeicherte Prozedur und laden Sie eine Sammlung oder erstellen Sie einen Datensatz aus den Ergebnissen.

Siehe hier: Was sind die Vor- und Nachteile der Beibehaltung von SQL in Stored Procs gegenüber Code? und hier SubSonic und gespeicherte Prozeduren

2voto

tsilb Punkte 7699

Siehe Antworten aquí y aquí . Ich verwende Stichproben, wann immer ich kann, es sei denn, es dauert wegen der Bürokratie eine Woche, bis es in die Datenbank aufgenommen wird.

2voto

Joel Coehoorn Punkte 377088

Gespeicherte Prozeduren sind Gold wert, wenn Sie mehrere Anwendungen haben, die von der gleichen Datenbank abhängen. So können Sie die Abfragelogik nur einmal definieren und pflegen, statt an mehreren Stellen.

Andererseits können gespeicherte Prozeduren selbst leicht zu einem großen Durcheinander in der Datenbank werden, da die meisten Systeme keine gute Methode haben, sie logisch zu organisieren. Außerdem kann es schwieriger sein, sie zu versionieren und Änderungen zu verfolgen.

1voto

paxdiablo Punkte 809679

Ich persönlich würde mich nicht an starre Regeln halten. In der Entwicklungsphase möchten Sie Ihre Abfragen natürlich schnell ändern können, daher würde ich sie inline stellen.

Später würde ich zu gespeicherten Prozeduren übergehen, weil sie die folgenden zwei Vorteile bieten. Ich bin sicher, es gibt noch mehr, aber diese beiden überzeugen mich.

1/ Gespeicherte Prozeduren fassen die Daten und den Code zur Bearbeitung/Extraktion dieser Daten an einem Punkt zusammen. Dies macht das Leben Ihres DBAs viel einfacher (vorausgesetzt, Ihre Anwendung ist groß genug, um einen DBA zu rechtfertigen), da er sie auf der Grundlage bekannter Faktoren optimieren kann.

Eines der größten Ärgernisse für DBAs sind Ad-hoc-Abfragen (vor allem von Clowns, die nicht wissen, was ein Full Table Scan ist). DBAs ziehen es vor, schöne, konsistente Abfragen zu haben, auf die sie die Datenbank abstimmen können.

2/ Gespeicherte Verfahren können Logik enthalten, die am besten in der Datenbank verbleibt. Ich habe gespeicherte Prozeduren in DB2/z mit vielen Dutzend Zeilen gesehen, aber alles, was der Kunde zu codieren hat, ist eine einzige Zeile wie "Gib mir die Liste".

Da die Logik für "diese Liste" in der Datenbank gespeichert ist, können die DBAs die Speicherung und Extraktion der Liste nach Belieben ändern. sans Kompromittierung oder Änderung des Client-Codes. Dies ist vergleichbar mit der Kapselung, die objektorientierte Sprachen "sauberer" macht als ihre Vorgänger.

1voto

Josh Punkte 2036

Ich habe eine Mischung aus Inline-Abfragen und gespeicherten Prozeduren verwendet. Ich bevorzuge eher den Stored-Procedure/View-Ansatz, da man dadurch einen schönen Platz erhält, an dem man bei Bedarf eine Änderung vornehmen kann. Bei Inline-Abfragen muss man immer erst den Code ändern, um eine Inline-Abfrage zu ändern, und dann die Anwendung neu starten. Außerdem kann sich die Inline-Abfrage an mehreren Stellen befinden, so dass Sie viel mehr Code ändern müssen als bei einer Stored Procedure.

Dann wieder, wenn Sie einen Parameter zu einer gespeicherten Prozedur hinzufügen müssen, Ihre immer noch eine Menge von Code sowieso ändern.

Ein weiterer Hinweis ist, wie oft sich die Daten hinter der gespeicherten Prozedur ändern. Bei meiner Arbeit haben wir Tabellen von Drittanbietern, die sich in normalisierte Tabellen auflösen können, oder eine Tabelle wird veraltet. In diesem Fall kann eine gespeicherte Prozedur/Ansicht die Gefährdung durch diese Änderung minimieren.

Ich habe auch eine komplette Anwendung ohne gespeicherte Prozeduren geschrieben. Sie hatte drei Klassen und 10 Seiten, das war es überhaupt nicht wert. Ich denke, es kommt ein Punkt, wenn seine Overkill, oder kann gerechtfertigt werden, aber es kommt auch auf Ihre persönliche Meinung und Vorliebe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X