Главная » Microsoft SQL Server, Базы данных » Тип данных XML

0

Будучи встроенным типом данных SQL Server, тип XML может использоваться любым из перечисленных ниже способов:

?               объявляться как локальная переменная T-SQL;

?               использоваться как параметр хранимой процедуры или пользовательской функции;

?               возвращаться из пользовательской функции;

?               создаваться как тип данных столбца таблицы.

позволяет хранить как целый документ XML, так и его фрагмент, при максимальном объеме в 2 Гбайт. Фрагментом могут быть строки одного заказа, в то время как полный документ может содержать данные обо всех заказчиках вместе с их заказами и строками заказов.

Данные XML должны быть хорошо отформированными (т.е. синтаксически корректными) и при необходимости могут проверяться относительно коллекции схемы XML.

Использование типа данных XML имеет ряд существенных преимуществ. Ядро базы данных фактически разделяет отдельные элементы и атрибуты XML, а затем хранит их как обычные двоичные данные, подобно типу VarBinary (max). Дескрипторы XML хранятся как метки, указывающие на фактические данные. Это существенно сокращает объем хранимых данных, повышает производительность и позволяет ядру базы данных использовать индексы XML и передвигаться по данным с помощью XQuery.

Распределение и преобразование

Поскольку тип данных XML является новым, существуют определенные правила преобразования данных из типа XML и в него. В документ XML и его узлы могут быть вставлены любые символьные данные.

может быть преобразован в следующие связанные символьные типы и получен из них:

?                                                                                              Char, VarChar          ? VarBinary (max);

?                                                                                              NChar, NVarChar     ? SQL_Variant (посредством типа VarChar).

может быть получен из типов text и ntext, но не может быть преобразован в них.

Ограничения типа XML

В связи с тем, что тип XML хранится не так, как обычные реляционные данные, и имеет вложенный формат, при работе с ним существует ряд дополнительных ограничений.

?               Его нельзя трактовать как обычные символьные типы.

?               Он не может участвовать в операциях сравнения (таких как =, > или <), за исключением IS NULL и IS NOT NULL.

?               Он не может участвовать в сортировке и группировке (т.е. в предложениях SORT BY и GROUP BY).

?               Он не может использовать встроенные скалярные функции, за исключением isnull О и coalesce().

?               Он не может быть использован в качестве ключевого столбца или ограничения на уникальность.

?               Он не может быть объявлен с сопоставлением.

Коллекции схем XML

Риск использования XML заключается в том, что он настолько гибок и подвижен, что без наличия каких-либо ограничений его данные могут содержать все, что угодно. С той же проблемой обычно сталкиваются в столбцах комментариев, которые могут содержать все, что угодно, от изменений адреса до дат рождения.

Решение заключается в создании дополнительного (но необязательного) пространства имен определения схемы XML (XSD) и подключения к нему переменной или столбца XML. Схема XML может быть определена для применения к документу в целом или только к его некоторому фрагменту.

Первым шагом является создание XSD как составной части коллекции схемы XML в базе данных. Как только схема будет создана, могут быть также созданы столбцы или переменные, ссылающиеся на нее. В следующем примере в схему учебной базы данных XMLeam добавляется определение XSD с названием ItemSchema:

CREATE DATABASE XMLearn USE XMLearn

CREATE XML SCHEMA COLLECTION ItemSchema AS N’

<xsd:schema xmlns:xsa="http://www.w3.org/200l/XMLSchema" xmlns="resume-schema" targetNamespace="resume-schema" elementFormDefault="qualified">

<xsd:element name="Item" type="ItemType"/>

<xsd:complexType name="ItemType" mixed="true">

<xsd:sequence>

<xsd:element name="SKU" type="xsd:string" minOccurs="1"/>

<xsd:element name="Size" type="xsd:string" minOccurs="1"/>

<xsd:element name="Color" type="xsd:string" minOccurs="1"/>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>’

Чтобы просмотреть установленные схемы, выполните запрос к системному представлению sysxml_schema_col lections.

Когда определение схемы XSD установлено в коллекции схем XML, переменная или столбец с типом XML при создании могут быть подключены к этому определению:

CREATE TABLE XMLGeneric (

ID INT IDENTITY NOT NULL PRIMARY KEY,

Data XML (имя_схемы)

)

Схема XSD также может быть определена и в Management Studio. Свойства столбца содержат пространство имен схемы XSD, которое будет использоваться для выбора XSD из коллекции схем.

SQL Server 2005 не поддерживает старые определения типов документа (DTD), На заметку используя исключительно XSD.

Индексы XML

Существенным преимуществом использования типа XML является то, что узлы XML сами по себе могут быть проиндексированы. Индексы XML повышают производительность запросов XQuery, однако не используются при извлечении данных XML с помощью реляционных запросов. В моей практике эти индексы зарекомендовали себя очень хорошо. Создание индексов XML является многошаговой операцией, включающей в себя создание первичного и вторичного индексов.

Первичный индекс XML должен создаваться первым. Он связывает узлы XML с реляционным кластеризованным индексом и позволяет создавать индексы, специфичные для XML.

CREATE [ PRIMARY ] XML INDEX имя_индекса ON <объект> ( имя_столбца_хт1 )

[ USING XML INDEX имя_индекса_хт1

[ FOR { VALUE | PATH | PROPERTY } ][ ; ]

Таблица должна иметь кластеризованный индекс, который не может быть изменен, пока существуют индексы XML.

Как только первичный индекс создан, для повышения производительности запросов XQuery могут быть созданы вторичные индексы.

?               Value. Индексирование данных для поиска по значению.

?               Path. Индексирование имен узлов для поиска по структуре XML.

?               Property. Оптимизация предикатов пар “имя-значение”.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии