Erstellen Sie Ihre physische DatenmodellALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder FOREIGN KEY (SalesOrderID) QUELLEN SalesOrder (SalesOrderID) ON DELETE CASCADE
Warum ist diese Anweisung eine deklarative referenzielle Integrität Einschränkung? Weil es erklärt der Tabelle referenzielle Integrität Verhalten als Teil der Tabelle Definition selbst, wie die Umsetzung solcher Verhalten als separates Stück Computer ausführbaren Code zu. Wir brechen diese Einschränkung DRI und schauen, was bedeutet, jeder Satz, beginnend mit dem folgenden : ALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder Die vorstehenden Satz ändert die Definition des OrderItem Kind-Tabelle, um die Einschränkung hinzufügen Objekt FK__OrderItem_SalesOrder gestattet. Dieses Objekt enthält die restlichen drei Zeilen Code, die die tatsächlichen Anweisungen der Einschränkung zu machen, wie folgt: FOREIGN KEY (SalesOrderID) QUELLEN SalesOrder (SalesOrderID) Dieser Satz ist das "Fleisch und Kartoffeln" der DRI-Einschränkung. Sie schafft die Einschränkung zwischen den Fremdschlüssel OrderItem.SalesOrderID und dem Primärschlüssel SalesOrder. SalesOrderID, so dass für jeden Wert gespeichert OrderItem.SalesOrderID, den gleichen Wert muss in SalesOrder.SalesOrderID gespeichert werden, mit denen OrderItem.SalesOrderID können übereinstimmen. Wenn ein anderer Wert in OrderItem.SalesOrderID versucht wird, wirft die Datenbank einen Fehler und der Versuch fehlschlägt. Schließlich ist die letzte Zeile des DRI Einschränkung wie folgt: ON DELETE CASCADE Diese Zeile weist die Datenbank zuerst löschen alle OrderItem SalesOrder Zeilen in eine Zeile, die kurz vor der gelöscht Zusammenhang stehen. Ohne die ON DELETE CASCADE-Klausel in diesem DRI Einschränkung der Versuch, eine Reihe SalesOrder mit verwandten OrderItem Zeilen löschen würde einen Fehler zu werfen, und keine Änderungen würden zum Inhalt der beiden Tabellen vorgenommen werden. Die ersten vier Zeilen des Zwangs-Code sind Standard DRI-Syntax unterstützt durch die meisten Datenbank-Plattformen. Einige Datenbank-Plattformen, wie zum Beispiel SQL Server 2000 und Oracle 9i, unterstützen die ON DELETE CASCADE Erweiterung der grundlegenden DRI Syntax, um diese Löschweitergaben erleichtern. Als Datenbank-Plattformen, die nicht unterstützen Löschweitergaben in DRI Zwänge, die Cascading löschen Verhalten muss durch ein separates Stück Code, der automatisch ausgeführt, sobald ein Benutzer auf eine Zeile zu löschen SalesOrder Versuche durchgeführt werden. Solch ein Stück Code automatisch ausgeführt wird als Trigger. Obwohl wir später eingehend zu erörtern auslöst, müssen wir die Grundlagen dessen, was sie abdecken und wie sie funktionieren, so dass Sie hier und Kontrast vergleichen sie mit DRI-Einschränkungen können. Vor allem, warum nennt man sie löst? Die Antwort ist, dass die Durchführung einer "ausgelöst" durch eine Datenbank Ereignis (INSERT, UPDATE oder DELETE). Ein Trigger ist auf eine bestimmte Tabelle verbunden und wird angewiesen, um automatisch ausgeführt, wenn eine oder mehrere spezifische Datenbank Veranstaltungen stattfinden, an diesem Tisch. Sie können statt nur um beliebigen SQL-Code, den Sie wollen in einen Auslöser, einschließlich Code, dass der Inhalt ändert anderen Tabellen. Nehmen wir zum Beispiel die folgende Klausel: ON DELETE CASCADE Wenn als Auslöser umgesetzt werden, wird die Klausel vor den folgenden Code ein: CREATE TRIGGER tD_SalesOrder SalesOrder FÜR ON DELETE AS BEGIN DECLARE @ Rows int SELECT @ Rows = rowcount IF @ @ @ Rows = 0 RETURN DELETE FROM OrderItem OrderItem ch, gelöscht WHERE ch.SalesOrderID = deleted.SalesOrderID END Nun zu brechen, was passiert in diesem Code. Starten Sie zunächst mit dem Trigger-Header. Dieser Header sowohl der Trigger erstellt und legt es auf eine bestimmte Tabelle und gibt auch an der Veranstaltung oder Ereignisse, die Brände es wie folgt: CREATE TRIGGER tD_SalesOrder SalesOrder FÜR ON DELETE AS Mit anderen Worten, Sie schaffen ein Trigger in der Tabelle mit dem Namen SalesOrder tD_SalesOrder, und Sie sind angewiesen, um jedes Mal, wenn eine DELETE-Veranstaltung findet am SalesOrder Tabelle auszuführen. So weit, so gut. Jetzt auf den Körper des Trigger-Look-der Teil, der gerade ausgeführt wird, wie folgt: BEGIN DECLARE @ Rows int SELECT @ Rows = rowcount IF @ @ @ Rows = 0 RETURN Sie starten den Code-Block mit BEGIN und dann sofort erklären, eine lokale Variable vom Typ Integer namens @ Zeilen. Diese Variable enthält die Anzahl der Zeilen in der Tabelle SalesOrder durch die Delete-Ereignis betroffen. Die globale Variable @ @ Zeilenanzahl wird durch den Datenbank-Server kontrolliert werden, es enthält immer die Anzahl der Zeilen in der Tabelle zuletzt durch den aktuell ausgeführten Code, der in diesem Fall die SalesOrder Tabelle geändert betroffen. So SELECT @ Rows = @ @ rowcount Stellen die Anzahl der gelöschten Zeilen aus der Tabelle SalesOrder in der lokalen Variablen, die Sie gerade erklärt. Wenn die Anzahl der betroffenen Zeilen gleich Null ist, die Trigger-Code ordnungsgemäß beendet, indem Sie die RETURN-Anweisung, und nichts weiter passiert. Wenn diese Rückkehr-Test nicht in der Trigger-Code vorhanden ist, führt der Rest der Trigger-Code, und Sie wollen nicht, dass das geschehen würde, weil Sie den Code, der nur ausgeführt werden soll, wenn es ausgeführt zugehörigen untergeordneten Datensätze verfügbar sind. Now auf den Teil der Auslöser, der tatsächlich durchführt Cascading löschen, wie folgt: DELETE FROM OrderItem OrderItem ch, gelöscht WHERE ch.SalesOrderID = deleted.SalesOrderID END Diese relationale löschen löscht die Zeilen in der OrderItem Tabelle, die alle Zeilen in Zusammenhang stehen "Gelöschte pseudotable-im Wesentlichen alle OrderItem Zeilen in die SalesOrder gelöschten Zeilen stehen. Schließlich schließen Sie die Einrichtung der Trigger mit END. Trigger haben sehr unterschiedlichen Fähigkeiten auf den verschiedenen Datenbank-Plattformen. Der Auslöser, dass wir gerade gesprochen haben, zum Beispiel arbeitet auf der SQL Server 2000-Plattform, die eine Veranstaltung über die Erklärung Ebene definiert-was bedeutet, dass diese Brände auslösen, wenn für jeden DELETE-Anweisung auf der Tabelle ausgeführt wird, egal, wie viele Datensätze betroffen sind von dieser Aussage. Zum Vergleich: Oracle-Trigger können entweder die Angabe Ebene tätig sind, wie in SQL-Server oder auf die Reihe Ebene, so dass die Trigger-Code ausgeführt wird, wenn für jede einzelne Zeile, die von der Anweisung betroffen ist. Ein weiterer Unterschied zwischen Datenbank-Plattformen ist, wenn sie schießen können auslöst. SQL Server Feuer ausgelöst, nachdem die Veranstaltung und nimmt alle Werte werden durch die Anweisung geändert (aber bevor sie auf die Platten gebunden), Oracle können Sie einen Trigger definieren, die entweder vor oder nach der Veranstaltung erfolgt auszuführen. Weitere Auszeichnungen gibt es auch. Also, wenn implementieren Sie die referenzielle Integrität mit DRI Zwänge und wann Sie löst? Nun, ein DRI Einschränkung ist fast immer schneller als die entsprechenden Betrieb in einem Trigger ausgeführt werden umgesetzt, und sie sicher einfacher werden, um Code-es können jedoch trotzdem brauchen mehr komplexe Logik einbezogen werden, und dafür müssen Sie verwenden auslöst.
Oft Sie wollen automatisch Standardwerte Zeilen in eine Tabelle eingefügt Versorgung, z. B. das aktuelle Datum und die Uhrzeit ein Verkauf oder eine Status-Wert, dass einige Anfangspunkt in einem Geschäftsprozess darstellt. Dieses Verhalten wird durch die Verwendung Standardwerte Standardwerte angewandt werden auf bestimmte Spalten der Tabelle definiert, und sie sagen, Ihre Datenbank, "Ist diese Spalte nicht in der INSERT-Anweisung für diese Tabelle gehen Sie voran und automatisch in diesem Standardwert. Wenn die INSERT-Anweisung in dieser Spalte, verwenden Sie einen beliebigen Wert beinhaltet war nicht geliefert. "Hier ist, wie eine Standard-Erklärung, in der Tabelle Definition aus: CREATE TABLE SalesOrder (SalesOrderID int IDENTITY (1,1), Kundennummer varchar (12) NULL, Verkaufsdatum datetime DEFAULT GetDate () NOT NULL, Sie werden feststellen, in diesem Artikel, dass wir gelegentlich fett Teile des Quelltextes. Dies ist eine einfache, aber effektive Mechanismus zur Unterstützung der Sie "sehen den Wald vor lauter Bäumen", wie wir ein Thema zu diskutieren. Zum Beispiel, Hervorhebung der DEFAULT-Satz in einen Code-Block bei der Erörterung Standardwerte hilft Ihnen schnell und umfassend den meisten geltenden Teil des Codes, ohne abgelenkt von den übrigen bei der Diskussion. Diese Erklärung standardmäßig automatisch stellt das Ergebnis der GetDate SQL Server ()-Funktion das aktuelle Datum und Zeit in die Spalte Verkaufsdatum, solange das Verkaufsdatum Spalte ist nicht Teil der INSERT-Anweisung. Wenn das Verkaufsdatum Spalte ist Teil der INSERT-Anweisung, wird der Wert durch die Erklärung geliefert werden. Ein Artikel von Linda vorgelegt Hastings Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Erstellen Sie Ihre physikalischen Daten Modell" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 105 users browsing the articles directory |
|
|