Frage

Zunächst einmal gibt es eine Teil Frage in Bezug auf das, aber es ist nicht genau das, was ich frage, so, Bär mit mir und gehe für sie.

Meine Frage ist, nachdem sie bei der Suche, was SubSonic tut und die ausgezeichneten Videos von Rob Connery muss ich fragen: sollen wir ein Tool wie diese verwenden und tun Inline-Abfragen oder werden wir die Abfragen Sie mit ein Aufruf der gespeicherte Prozedur?

Ich will keine Arbeit von Rob zu minimieren (was ich denke, es ist erstaunlich), aber ich will einfach nur Ihre Meinung zu diesem Grunde brauche ich ein neues Projekt zu starten und ich bin in der Mitte der Leitung; werde ich SubSonic (oder ein anderes ähnliches Werkzeug, wie NHibernate) oder ich meine Methode einfach weiter, die immer eine gespeicherte Prozedur aufrufen, selbst wenn es sich um ein einfach ist wie

Select this, that from myTable where myStuff = StackOverflow;
War es hilfreich?

Lösung

Es braucht nicht das eine oder das andere zu sein. Wenn es sich um eine einfache Abfrage ist, verwenden Sie die SubSonic Abfrage-Tool. Wenn es komplizierter ist, eine gespeicherte Prozedur verwenden und eine Sammlung laden oder einen Datensatz aus den Ergebnissen erstellen.

Sehen Sie hier: SubSonic und Stored Procedures

Andere Tipps

Siehe Antworten hier und hier . Ich benutze sprocs wann immer ich kann, es sei denn, Bürokratie bedeutet es eine Woche dauert es in die Datenbank zu machen.

Stored Procedures sind Gold, wenn Sie mehrere Anwendungen, die auf der gleichen Datenbank abhängen. Es lässt Sie definieren und Abfragelogik einmal pflegen, anstatt mehreren Stellen.

Auf der anderen Seite, ist es ziemlich einfach für gespeicherte Prozeduren selbst ein großes wirres Durcheinander in der Datenbank werden, da die meisten Systeme keine gute Methode haben sie logisch zu organisieren. Und sie können schwieriger zu Version und Änderungen nachverfolgen.

Ich würde nicht persönlich starre Regeln folgen. Sicherlich während der Entwicklungsphase, wollen Sie in der Lage sein, schnell Ihre Anfragen zu ändern, damit ich sie inline würde.

Später möchte ich gespeicherte Prozeduren bewegen, weil sie die folgenden zwei Vorteile bieten. Ich bin sicher, es gibt mehr, aber diese beiden gewinnen mir.

1 / Stored Procedures Gruppe der Daten und der Code zum Manipulieren / dass die Daten an einem Punkt zu extrahieren. Das macht das Leben Ihres DBA viel einfacher (vorausgesetzt, Ihre Anwendung beträchtliche genug ist, ein DBA zu rechtfertigen), da sie auf bekannten Faktoren optimieren können.

Einer der großen bugbears eines DBA ist Ad-hoc-Abfragen (vor allem von Clowns, die nicht wissen, was ein Full Table Scan ist). DBAs bevorzugt schöner, konsistente Abfragen haben, dass sie abstimmen können, die Datenbank zu.

2 / Stored Procedures kann Logik enthalten, die in der Datenbank überlassen wird. Ich habe gespeicherte Procs mit vielen Dutzend Zeilen in DB2 / z gesehen, aber alle der Client muss Code eine einzelne Zeile wie „Gib mir diese Liste“ ist.

Da die Logik für „diese Liste“ in der Datenbank gespeichert wird, kann die DBAs ändern, wie es gespeichert und nach Belieben extrahierte ohne beeinträchtigen oder den Client-Code zu ändern. Dies ist ähnlich wie Verkapselung, die Objekt-orientd Sprachen ‚sauberere‘ gemacht als das, was kam vor.

Ich habe eine Mischung aus Inline-Abfragen und gespeicherte Prozeduren durchgeführt. Ich ziehe es mehr der Stored Procedure / view Ansatz, da es einen schönen Platz gewinnt für Sie eine Änderung vornehmen, wenn nötig. Wenn Sie Inline-Abfragen haben müssen Sie immer gehen und den Code zu ändern, um eine Inline-Abfrage zu ändern und dann wieder rollen die Anwendung. Sie können auch die Inline-Abfrage an mehreren Stellen, so dass Sie viel mehr Code als mit einer gespeicherten Prozedur ändern müßten.

Dann wieder, wenn Sie einen Parameter an eine gespeicherte Prozedur hinzufügen, wird Ihr noch eine Menge Code zu ändern sowieso.

Ein weiterer Hinweis ist, wie oft die Datenänderungen hinter der gespeicherten Prozedur, wo ich, dass wir Dritte Tabellen arbeiten, die in normalisierte Tabellen brechen kann, oder eine Tabelle wird obsolet. In diesem Fall wird eine gespeicherte Prozedur / Ansicht minimieren kann die Belichtung Sie zu dieser Änderung haben.

Ich habe auch eine gesamte Anwendung ohne gespeicherte Prozeduren geschrieben. Es hatte drei Klassen und 10 Seiten, war es nicht wert überhaupt. Ich denke, es kommt ein Punkt, wenn seine übertrieben oder gerechtfertigt werden kann, aber es kommt auch nach unten auf Ihre persönliche Meinung und Vorlieben.

Wollen Sie immer nur auf Ihre Datenbank zugreifen aus, dass eine Anwendung?

Wenn nicht, dann sind Sie wahrscheinlich besser dran gespeicherten Prozeduren, so dass Sie eine konsistente Schnittstelle zur Datenbank haben.

Gibt es ein erheblich Kosten Ihre Anwendung zu verteilen, wenn Sie eine Änderung vornehmen müssen?

Wenn ja, dann sind Sie wahrscheinlich besser dran gespeicherten Prozeduren, die auf dem Server und diese Änderungen geändert werden können, werden nicht verteilt werden müssen.

Sind Sie überhaupt besorgt über die Sicherheit Ihrer Datenbank?

Wenn ja, dann möchten Sie wahrscheinlich gespeicherte Prozeduren verwenden, so dass Sie keinen direkten Zugriff auf die Tabellen zu einem Benutzer gewähren müssen.

Wenn Sie eine kleine Anwendung zu schreiben, ohne ein breites Publikum, für ein System, das nicht verwendet wird oder außerhalb Ihrer Anwendung zugegriffen wird, dann Inline-SQL könnte in Ordnung sein.

Mit Subsonic werden Sie inline verwenden, Ansichten und gespeicherte Prozeduren. Subsonic macht den Datenzugriff einfacher, aber man kann nicht das Everthing in Subsonic Abfrage tun. Obwohl die neueste Version 2.1 wird immer besser.

Für grundlegende CRUD-Operationen, Inline-SQL wird einfach sein. Für komplexere Datenbedarf, benötigen eine Ansicht vorgenommen werden und dann werden Sie eine Subsonic Abfrage im Blick tun.

Stored Procs sind gut für härtere Daten Berechnungen und Datenabruf. Set basierte Suche ist in der Regel immer schneller als Verfahrensbearbeitung.

Aktuelle Subsonic-Anwendung verwendet alle drei Optionen mit sehr guten Ergebnissen.

Ich ziehe Inline-SQL, wenn die gespeicherte Prozedur eigentliche Logik hat (Variablen, Cursor usw.) beteiligt. Ich habe LINQ wurde unter Verwendung von in letzter Zeit in SQL und unter den generierten Klassen und das Hinzufügen von Teilklassen, das einige vordefinierte, gemeinsame LINQ-Abfragen haben. Ich empfinde dies für eine schnellere Entwicklung macht.

Edit: Ich weiß, ich werde für diese erhalten downmodded. Wenn Sie jemals nach unten auf Fremdschlüssel oder gespeicherte Prozeduren sprechen, werden Sie downmodded. DBAs müssen die Arbeitsplatzsicherheit Ich denke, ...

Die Vorteile von Stored Procedure (meiner Meinung nach)

  1. Die SQL ist an einem Ort
  2. Sie können die Abfragepläne erhalten.
  3. Sie können die Datenbankstruktur ändern, wenn nötig die Leistung zu verbessern
  4. Sie werden zusammengestellt und damit diese Abfragepläne haben nicht on the fly aufgebaut werden
  5. Wenn Sie die Berechtigungen verwenden - Sie können die Abfragen sicher sein, dass die Anwendung macht
  6. .
  1. Stored Procedures Gruppe der Daten und der Code zum Manipulieren / dass die Daten an einem Punkt zu extrahieren. Das macht das Leben Ihres DBA viel einfacher (vorausgesetzt, Ihre Anwendung beträchtliche genug ist, ein DBA zu rechtfertigen), da sie auf bekannten Faktoren optimieren können.

  2. Gespeicherte Prozeduren können Logik enthalten, die in der Datenbank überlassen wird. Ich habe gespeicherte Procs mit vielen Dutzend Zeilen in DB2 / z gesehen, aber alle der Client muss Code eine einzelne Zeile wie „Gib mir diese Liste“ ist.

  3. Der beste Vorteil von gespeicherten Procs mit i gefunden ist, dass, wenn wir in der Logik ändern, bei Inline-Abfrage, die wir zu Everyplace gehen und es zu ändern und die für jede Anwendung Wieder- zu rollen, sondern in dem Fall der gespeicherten proc Änderung nur an einer Stelle erforderlich ist.

So Inline-Abfragen verwenden, wenn Sie klare Logik haben; ansonsten lieber gespeicherte Procs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top