XML-Datentyp im SQL Server

In meinem Artikel zu DTOs beschrieben habe, lassen sich Datenobjekte sehr leicht als XML serialisieren. Ich habe das Konzept aufgegriffen und zur Datenhaltung von Konfigurationen verwendet. Die XML Daten speichere ich in einer dedizierten DB-Tabelle (die Tabellenstruktur hierfür werde ich in einem späteren Blogeintrag veröffentlichen). Jetzt musste ich mir überlegen, welchen Datentyp ich für die entsprechende Spalte mit den XML Werten verwende: Nehme ich varchar(max) oder XML.

XML als vollwertigen Datentyp gibt es bereits seit SQL Server 2005. Da wir SQL Server 2008 R2 einsetzen, wäre es also durchaus zu erwägen. Um eine sondierte Entscheidung treffen zu können, habe ich mir ein SQL Server 2008 Buch (nicht R2!) zur Hand genommen. Zunächst einmal einige Vorteile:

  • Constraints &  Indizes können darauf erstellt werden
  • Setzen eines Defaultwertes ist möglich
  • Validierung gegen ein im SQL Server hinterlegtes Schema
  • Ausführung von in SQL-Befehlen eingebettetes XQuery

Hört sich zunächst einmal ganz gut an. Nun aber ein gravierender Nachteil, der zumindest für den SQL Server 2008 gilt (bzgl. R2 kann ich keine Aussage machen, allerdings glaube ich nicht, dass sich etwas geändert hat):

Wegen der binären Speicherung können XML Dokumente nicht zu 100% identisch erhalten werden, sodass etwa Leerzeichen entfernt und die Reihenfolge der Attribute verändert werden.

Nun ja, bei einer Config-Tabelle ist dies vielleicht nicht wesentlich von Bedeutung, aber wenn exakte Kopien eines XML Dokumentes z.B. aus rechtlichen Gründen benötigt werden, dann wäre dies keine Option. Diese Information, auch wenn Sie vielleicht zunächst einmal nicht relevant für meine technischen Anforderungen ist, stieß mir doch ein wenig auf. Hinzu kommt, dass die Vorteile für mich keine zwingende Notwendigkeit sind.

To make a long story short: Ich entschied mich beim Persistieren von Konfigurationsdaten, die als XML vorliegen, für den Datentyp varchar(max).

One thought on “XML-Datentyp im SQL Server

  1. […] XML-Datentyp im SQL Server […]

    Gefällt mir

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: