Einleitung
Schemabindung ist ein optionales Attribut bei der Erstellung von Ansichten oder Funktionen innerhalb einer Datenbank. Wenn Schemabindung für ein Objekt aktiviert ist, können die davon betroffenen Tabellen oder Tabellenspalten nicht modifiziert oder gelöscht werden. Das ist erst wieder möglich, wenn das Objekt mit Schemabindung geändert oder gelöscht wurde. Ansichten mit Index sind automatisch schemagebunden, beziehungsweise muss eine Ansicht schemagebunden sein, damit ein Index erstellt werden kann.
Wenn wir eine Ansicht oder Funktion innerhalb unseres schemagebundenen Objektes referenzieren, muss diese ebenfalls schemagebunden sein und alle Objekte, auf die innerhalb der Ansicht zugegriffen wird, müssen sich in der selben Datenbank befinden wie die Ansicht.
Anwendung
Schemabindung dient dazu, unerwartete Änderungen an der Struktur einer Tabelle zu vermeiden. Es schafft Abhängigkeiten, die eine genauere Prüfung notwendig machen, bevor das Schema einer Tabelle verändert wird. Das ist vor Allem sinnvoll, wenn ein großes Team mit einer Datenbank arbeitet.
Wir erstellen eine neue Ansicht mit Schemabindung.
CREATE VIEW ShippingAddress (Addressline1)
WITH Schemabindung
AS
SELECT Address.Addressline1
FROM SalesLT.Address
INNER JOIN SalesLT.CustomerAddress
ON CustomerAddress.AddressID = Address.AddressID
WHERE CustomerAddress.AddressType = 'Shipping';
Ausgabe der eben erstellten Ansicht:
Jetzt versuchen wir, eine der betroffenen Tabellen zu beeinflussen, indem wir eine Spalte aus CustomerAddress löschen.
ALTER TABLE SalesLT.CustomerAddress
DROP COLUMN AddressID;
Dank Schemabindung kann diese Anfrage nicht ausgeführt werden.
Eine Namensänderung ist ebenfalls nicht möglich.
EXEC sp_rename 'SalesLT.CustomerAddress.AddressID', 'AdID', 'COLUMN';
Schemabindung verhindert auch das Löschen einer ganzen Tabelle, die benutzt wird.
DROP TABLE SalesLT.CustomerAddress;
Wir sehen also, dass Schemabindung dafür sorgt, dass unsere Ansichten und Funktionen konsistent und in ihrer Abhängigkeit funktional bleiben. Durch die Fehlermeldungen werden wir auch direkt auf das betreffende Objekt aufmerksam gemacht. Wenn wir das Objekt mit Schemabindung löschen oder hier die gewünschten Änderungen zuerst vornehmen, funktionieren die obigen Anfragen.
Außerdem können wir Einfluss nehmen auf die Spalten und Tabellen, die von unserem Objekt mit Schemabindung nicht betroffen sind.
Wenn wir Schemabindung benutzen, ändern sich die Regeln für Anfragen leicht: Wir können innerhalb der Definition Ansicht nicht mit SELECT* arbeiten, sondern nur mit genauen Spaltenangaben. Außerdem müssen wir zweiteilige Namen benutzen: SchemaName.ObjektName. Einteilige, dreiteilige und vierteilige Namen sind nicht zugelassen.
Bei der Verwendung von Schemabindung ist außerdem zu beachten, dass die Funktionen sys.sp_refreshview und sys.sp_refreshsqlmodule nicht funktionieren. Diese Funktionen dienen dazu, nicht-schemagebundene Ansichten und Module zu updaten, wenn an den damit verbundenen Objekten Änderungen vorgenommen wurden, was natürlich bei Schemabindung wegfällt.
Leistungspakete der Mainzer Datenfabrik
Als professioneller SQL Server Support und zertifizierter Microsoft Partner unterstützen wir Sie in allen Fragen und individuellen Problemen rund um Ihre Serverumgebung, egal ob vor Ort oder remote. Überzeugen Sie sich selbst von unserem vielfältigen Angebot und den individuellen Leistungspaketen.
Schemabindung überprüfen
Wir können mit OBJECTPROPERTY
prüfen, ob ein Objekt schemagebunden ist.
SELECT OBJECTPROPERTY (OBJECT_ID ('ShippingAddress'), 'isSchemaBound');
Der Rückgabewert 1 bestätigt, dass ShippingAddress schemagebunden ist.
Wir können alternativ auch alle Objekte ausgeben lassen, bei denen Schemabindung aktiviert ist.
SELECT * FROM sys.sql_modules WHERE is_schema_bound <> 0;
Fazit
Schemabindung ist eine hilfreiche Option, um eine Datenbank vor unerwarteten Veränderungen in ihrer Struktur zu schützen. Es ist vor allem in großen Teams sinnvoll, Schemabindung einzusetzen, aber auch in kleinen Teams bietet es einen zusätzlichen Schritt, den Mitarbeitende gehen müssen, um eine Tabelle zu löschen oder Ähnliches. Im Allgemeinen ersetzt es aber keinesfalls die sinnvolle Verteilung von Rollen und Berechtigungen innerhalb einer Datenbank.
Wenn Sie mehr über das Thema Schemabindung erfahren möchten und wie Sie es ggf. in Ihren Teams sinnvoll nutzen können, stehen Ihnen unsere Expert:innen dazu gerne zur Verfügung. Kontaktieren Sie uns dafür gerne über unser Kontaktformular und vereinbaren ein unverbindliches Erstgespräch mit uns.
Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.
Kontaktieren Sie uns gerne über das
Kontaktformular und vereinbaren ein unverbindliches
Beratungsgespräch mit unseren Berater:innen zur
Bedarfsevaluierung. Gemeinsam optimieren wir Ihre
Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!
55118 Mainz
info@madafa.de
+49 6131 3331612
Freitags: