Blog
Friday, 07. July 2023

Schemabinding in SQL

Mainzer Datenfabrik

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:

Mainzer Datenfabrik - Schemabinding in SQL

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.

Mainzer Datenfabrik - Schemabinding in SQL

Eine Namensänderung ist ebenfalls nicht möglich.

EXEC sp_rename 'SalesLT.CustomerAddress.AddressID', 'AdID', 'COLUMN';
Mainzer Datenfabrik - Schemabinding in SQL

Schemabindung verhindert auch das Löschen einer ganzen Tabelle, die benutzt wird.

DROP TABLE SalesLT.CustomerAddress;
Mainzer Datenfabrik - Schemabinding in SQL

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.

IT-Consulting Training SQL Server FAQ

Schemabindung überprüfen

Wir können mit OBJECTPROPERTY prüfen, ob ein Objekt schemagebunden ist.

SELECT OBJECTPROPERTY (OBJECT_ID ('ShippingAddress'), 'isSchemaBound');
Mainzer Datenfabrik - Schemabinding in SQL

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;
Mainzer Datenfabrik - Schemabinding in SQL

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.

Interesse geweckt?

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!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ
Wir sind Ihre SQL Expert:innen!
Noch Fragen? - Wir haben immer die passende Antwort für Sie!