2016-05-19 12 views
1

Ich bin mir nicht sicher, ob es darüber eine Debatte gibt.Beim Einfügen in mehrere Tabellen, was ist der beste Ansatz für diese Angelegenheit?

Wenn ich Bücher lese, wird empfohlen, triggers zu verwenden, um Einfügungen in andere Tabellen zu verfolgen. Auf der anderen Seite verwendet mein Mentor stored procedures, um in die anderen Tabellen einzufügen.

Meine Frage hier, welche ist die beste Methode? Oder gibt es einen besseren Weg?

+1

Gespeicherte Prozeduren und Trigger sind verschiedene Tools, mit denen verschiedene Aufgaben ausgeführt werden können. Sie vergleichen Äpfel und Orangen. –

+0

Ich empfehle Ihnen, Stored Procedures zu verwenden. In der Stored Procedure können Sie Massen einfügen mit der Verwendung von XML – jelliaes

+0

Welche DBMS verwenden Sie? –

Antwort

0

Wenn Sie Daten in Tabelle einfügen möchten, können Sie dies nur durch gespeicherte Prozeduren tun, nicht durch Trigger, da Trigger zur Laufzeit keine Parameter oder irgendetwas akzeptieren können.

Sie können eine gespeicherte Prozedur aus einer anderen gespeicherten Prozedur aufrufen, aber Sie können keinen anderen Trigger innerhalb eines Triggers direkt aufrufen.

Also ich denke, Sie sollten Verfahren eher dann löst

Sie besuchen können, Link auf folgende Details gespeichert sind.

http://www.codeproject.com/Tips/624566/Differences-between-a-Stored-Procedure-and-a-Trigg

Bitte meine Antwort Antworten.

+0

Ein Beispiel für einen Trigger, der in eine andere Tabelle einfügt, ist ein Datenänderungs-Logging-Trigger, der alle Änderungen in einer Tabelle in einer Logging-Tabelle aufzeichnet. –

0

Sie brauchen auch keines. Starten Sie eine Transaktion, führen Sie alle Ihre Einfügungen durch (übergeordnete Tabelle zuerst, untergeordnete Tabellen danach), beenden Sie die Transaktion mit COMMIT, und Sie sind fertig.

Verwenden Sie gespeicherte Prozeduren, wenn Sie dies bündeln und eine gewisse Konsistenz sicherstellen möchten (so dass es beispielsweise immer mindestens eine untergeordnete Tabelle für eine übergeordnete Tabelle gibt). Aber das kann kompliziert werden. Angenommen, Sie möchten ein neues Produkt mit allen Farben, Größen, Lieferanten und Absatzmärkten einfügen. Bestimmte Farben/Größen werden von einem oder mehreren Lieferanten geliefert und nicht von den anderen, ebenso wie bei Verkaufsmärkten. Um diese Beziehungen zu zeigen, benutzen wir normalerweise Tabellen, aber jetzt müssen Sie diese irgendwie in Parameter einfügen, um sie in Tabellen einzufügen. Mir wurde gesagt, dass einige Leute alle ihre Datenbanken in Prozeduren schreiben. Dies ist wahrscheinlich möglich, hat aber Grenzen.

Wie Auto-Inserts durch Trigger: Sie können sie verwenden, um Daten zu protokollieren, um eine Geschichte oder dergleichen zu erhalten, aber Sie verwenden sie nicht zum Einfügen von Geschäftsdaten. Stellen Sie sich einen Auftrag mit seinen Positionen vor: Sie fügen den Auftragskopf (Bestelldatum, Kundennummer, ...) ein, aber wie soll der Auslöser wissen, welche Artikel bestellt wurden? Oder umgekehrt: Sie fügen eine Bestellposition (Artikelnummer, Preis) ein und möchten, dass die Kopfzeile automatisch erstellt wird, aber wie soll der Trigger die Kundennummer kennen? Trigger sind für solche Dinge nicht geeignet.

Wie bereits erwähnt: Normalerweise würden Sie nur mit einfachen SQL in Transaktionen arbeiten und das war's.

+0

Über den Teil über die gespeicherten Prozeduren, wenn man die Struktur der Datenbank sorgfältig entwerfen würde, würde es kein Problem geben. In Ihrem Beispiel in Bezug auf den Fall, dass eine bestimmte Farbe/Größe eines Produkts von vielen Lieferanten geliefert wird, muss ich mich nicht darum kümmern, da ich PostgreSQL verwende, und ich kann einfach die Spalte "Lieferanten" im JSON-Format und Hinzufügen neuer Lieferanten zu den vorhandenen JSON-Daten von Lieferanten.Aber ist diese Methode Ihrer Meinung nach akzeptabel für eine Entwicklung? –

+0

Mein Argument ist, wenn Sie Beziehungen einfügen, z. ein Gegenstand, seine Gegenstandsfarben, seine Gegenstandsgrößen, seine Gegenstandsfarben, seine Gegenstandsfarben, Hilfslieferanten, usw., das ist schwer als Baum darzustellen, weil es keine hierarchische Struktur hat. Sorgt ein Objekt für Objektfarben oder Objektgrößen? Es ist beides, also ist dies kein hierarchischer Baum mehr. Aus diesem Grund verwenden Sie eine Datenbank. Es kann mit relationalen Objekten und damit zu JSON dargestellt werden, denke ich, aber das ist kompliziert. Es wäre viel einfacher, reine insert-Anweisungen zu verwenden, als die relational strukturierten Parameter für eine ... –

+0

... Super-Einfüge-Prozedur erstellen zu müssen. Natürlich könnten Sie dies in separate Funktionen fn_insert_item, fn_insert_itemcolor, fn_insert_itemsize aufteilen, aber dann verlieren Sie den Vorteil der gespeicherten Prozedur über einzelne Einfügungen. Dies ist jedoch ein extremes Beispiel, nur um die Grenzen zu zeigen. Ja, die Verwendung von gespeicherten Prozeduren zum Schreiben in die Datenbank ist ein gültiger Ansatz. Und je reicher die gespeicherte Prozedur, desto besser. Mit PL/pgSQL bietet PostgreSQL meines Wissens eine reichhaltige Sprache. Es scheint also ein guter Ansatz zu sein ... –

Verwandte Themen