Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
W tym artykule omówiono zalety i ograniczenia typu danych XML w programie SQL Server oraz sposób przechowywania danych XML.
Model danych relacyjnych lub XML
Jeśli dane są wysoce ustrukturyzowane ze znanym schematem, model relacyjny może działać najlepiej w przypadku przechowywania danych. Program SQL Server udostępnia wymagane funkcje i narzędzia, które mogą być potrzebne. Z drugiej strony, jeśli struktura jest częściowo ustrukturyzowana lub nieustrukturyzowana lub nieznana, należy wziąć pod uwagę modelowanie takich danych.
Kod XML jest dobrym wyborem, jeśli chcesz, aby model niezależny od platformy zapewniał przenośność danych przy użyciu znaczników strukturalnych i semantycznych. Ponadto jest to odpowiednia opcja, jeśli niektóre z następujących właściwości są spełnione:
Dane są rozrzedłe lub nie znasz struktury danych lub struktura danych może ulec znacznej zmianie w przyszłości.
Dane reprezentują hierarchię zawierania, zamiast referencji między elementami, i mogą być rekursywne.
Kolejność jest nieodłączna dla Twoich danych.
Chcesz wykonać zapytanie dotyczące danych lub zaktualizować ich części na podstawie jego struktury.
Jeśli żaden z tych warunków nie zostanie spełniony, należy użyć modelu danych relacyjnych. Jeśli na przykład dane są w formacie XML, ale aplikacja używa tylko bazy danych do przechowywania i pobierania danych, wymagana jest kolumna [n]varchar(max). Przechowywanie danych w kolumnie XML ma dodatkowe korzyści. Obejmuje to określenie przez silnik, że dane są prawidłowo sformułowane lub prawidłowe, a także wsparcie dla szczegółowych zapytań i aktualizacji do danych XML.
Przyczyny przechowywania danych XML w programie SQL Server
Poniżej przedstawiono niektóre z powodów używania natywnych funkcji XML w programie SQL Server zamiast zarządzania danymi XML w systemie plików:
Chcesz udostępniać, wykonywać zapytania i modyfikować dane XML w wydajny i transakcyjny sposób. Szczegółowe informacje o dostępie do danych są ważne dla aplikacji. Możesz na przykład wyodrębnić niektóre sekcje w dokumencie XML lub wstawić nową sekcję bez zastępowania całego dokumentu.
Masz dane relacyjne i dane XML i chcesz współdziałanie zarówno danych relacyjnych, jak i XML w aplikacji.
Potrzebna jest obsługa języka na potrzeby modyfikowania zapytań i danych dla aplikacji między domenami.
Chcesz, aby serwer zagwarantował, że dane są prawidłowo sformułowane, a także opcjonalnie zweryfikuj dane zgodnie ze schematami XML.
Chcesz indeksować dane XML w celu wydajnego przetwarzania zapytań i osiągnięcia dobrej skalowalności, a także używać doskonałego optymalizatora zapytań.
Potrzebujesz dostępu do danych XML za pomocą protokołu SOAP, ADO.NET i OLE DB.
Chcesz użyć funkcji administracyjnych serwera bazy danych do zarządzania danymi XML. Na przykład będzie to tworzenie kopii zapasowych, odzyskiwanie i replikacja.
Jeśli żaden z tych warunków nie jest spełniony, może być lepiej przechowywać dane jako typ obiektu innego niż XML, duży typ obiektu, taki jak [n]varchar(max) lub varbinary(max).
Opcje przechowywania XML
Opcje przechowywania kodu XML w programie SQL Server obejmują następujące elementy:
Natywny magazyn jako typ danych XML
Dane są przechowywane w wewnętrznej reprezentacji, która zachowuje zawartość XML danych. Ta wewnętrzna reprezentacja zawiera informacje o hierarchii zawierania, kolejności dokumentów i wartościach elementów i atrybutów. W szczególności zawartość elementu InfoSet danych XML jest zachowywana. Aby uzyskać więcej informacji o zestawie informacji, odwiedź stronę http://www.w3.org/TR/xml-infoset. Zawartość zestawu informacji może nie być identyczną kopią tekstu XML, ponieważ następujące informacje nie są zachowywane: nieistotne odstępy, kolejność atrybutów, prefiksy przestrzeni nazw i deklaracja XML.
W przypadku typu danych XML, typu danych XML powiązanego ze schematami XML, post-schema validation InfoSet (PSVI) dodaje informacje o typie do zestawu InfoSet i jest zakodowany w reprezentacji wewnętrznej. Znacznie poprawia to szybkość analizowania. Aby uzyskać więcej informacji, zobacz specyfikacje schematu XML W3C pod adresem http://www.w3.org/TR/xmlschema-1 i http://www.w3.org/TR/xmlschema-2.
Mapowanie między przechowywaniem danych XML a relacyjnym
Przy użyciu schematu z adnotacjami (AXSD) kod XML jest rozłożony na kolumny w co najmniej jednej tabeli. Pozwala to zachować wierność danych na poziomie relacyjnym. W rezultacie struktura hierarchiczna jest zachowywana, mimo że kolejność między elementami jest ignorowana. Schemat nie może być rekursywny.
Duży magazyn obiektów, [n]varchar(max) i varbinary(max)
Jest przechowywana identyczna kopia danych. Jest to przydatne w przypadku aplikacji specjalnych, takich jak dokumenty prawne. Większość aplikacji nie wymaga dokładnej kopii i jest zadowolona z zawartości XML (wierność zestawu informacji).
Ogólnie rzecz biorąc, może być konieczne użycie kombinacji tych metod. Na przykład możesz chcieć przechowywać dane XML w kolumnie typu danych xml i wyodrębniać właściwości z danych XML do kolumn relacyjnych. Możesz też użyć technologii mapowania, aby przechowywać niecykliczne części w kolumnach innych niż XML i tylko cykliczne części w kolumnach typu danych XML .
Wybór technologii XML
Wybór technologii XML, natywnego kodu XML i widoku XML zwykle zależy od następujących czynników:
Opcje magazynu
Dane XML mogą być bardziej odpowiednie do przechowywania dużych obiektów (na przykład instrukcji obsługi produktu) lub bardziej odpowiedniego do przechowywania w kolumnach relacyjnych (na przykład pozycji przekonwertowanej na XML). Każda opcja przechowywania zachowuje w innym zakresie integralność dokumentu.
Możliwości zapytań
Możesz znaleźć jedną opcję magazynu bardziej odpowiednią niż inną, na podstawie charakteru zapytań i zakresu, w jakim wykonujesz zapytania dotyczące danych XML. Szczegółowe zapytanie dotyczące danych XML, na przykład ocena predykatu w węzłach XML, jest obsługiwane w różnym stopniu w dwóch opcjach przechowywania.
Indeksowanie danych XML
Możesz zaindeksować dane XML, aby przyspieszyć wydajność zapytań XML. Opcje indeksowania różnią się w zależności od opcji przechowywania, więc musisz dokonać odpowiedniego wyboru, aby zoptymalizować obciążenie.
Możliwości modyfikacji danych
Niektóre obciążenia obejmują szczegółowe modyfikacje danych XML. Na przykład może to obejmować dodawanie nowej sekcji w dokumencie, podczas gdy inne obciążenia, takie jak zawartość internetowa, nie. Obsługa języka modyfikacji danych może być ważna dla aplikacji.
Obsługa schematu
Dane XML mogą być opisane przez schemat, który może być dokumentem schematu XML lub nie. Obsługa kodu XML powiązanego ze schematem zależy od technologii XML.
Różne opcje mają również różne cechy wydajności.
Natywny magazyn XML
Dane XML można przechowywać w kolumnie typu danych XML na serwerze. Jest to odpowiedni wybór, jeśli mają zastosowanie następujące elementy:
Potrzebujesz prostego sposobu przechowywania danych XML na serwerze, a jednocześnie zachowania kolejności dokumentów i struktury dokumentów.
Być może nie masz schematu dla danych XML.
Chcesz wykonywać zapytania i modyfikować dane XML.
Chcesz indeksować dane XML w celu szybszego przetwarzania zapytań.
Aplikacja potrzebuje widoków wykazu systemu w celu administrowania danymi XML i schematami XML.
Natywny magazyn XML jest przydatny w przypadku dokumentów XML, które mają szereg struktur lub dokumenty XML, które są zgodne z różnymi lub złożonymi schematami, które są zbyt trudne do mapowania na struktury relacyjne.
Przykład: Modelowanie danych XML przy użyciu typu danych XML
Rozważ podręcznik produktu w formacie XML składający się z oddzielnego rozdziału dla każdego tematu i zawiera wiele sekcji w każdym rozdziale. Sekcja może zawierać podsekcje. W rezultacie <section> jest elementem rekursywnym. Podręczniki produktu zawierają dużą ilość zawartości mieszanej, diagramów i materiałów technicznych; dane są częściowo ustrukturyzowane. Użytkownicy mogą chcieć wykonać kontekstowe wyszukiwanie interesujących tematów, takich jak wyszukiwanie sekcji w "indeksie klastrowanym" w rozdziale na temat "indeksowania" i wykonywanie zapytań dotyczących ilości technicznych.
Odpowiedni model magazynu dla dokumentów XML to kolumna typu danych XML . Spowoduje to zachowanie zawartości elementu InfoSet danych XML. Indeksowanie kolumny XML przynosi korzyści z wydajności zapytań.
Przykład: zachowywanie dokładnych kopii danych XML
Na ilustracji załóżmy, że przepisy rządowe wymagają przechowywania dokładnych kopii tekstowych dokumentów XML. Mogą to być na przykład podpisane dokumenty, dokumenty prawne lub zamówienia transakcji akcji. Możesz przechowywać dokumenty w kolumnie [n]varchar(max).
W przypadku wykonywania zapytań przekonwertuj dane na typ danych XML w czasie wykonywania i wykonaj na nim zapytanie XQuery. Konwersja w czasie wykonywania może być kosztowna, zwłaszcza gdy dokument jest duży. W przypadku częstego wykonywania zapytań można nadmiarowo przechowywać dokumenty w kolumnie typu danych XML i indeksować je podczas zwracania dokładnych kopii dokumentów z kolumny [n]varchar(max).
Kolumna XML może być kolumną obliczaną na podstawie kolumny [n]varchar(max). Nie można jednak utworzyć indeksu XML dla obliczonej kolumny XML ani indeksu XML nie można utworzyć na kolumnach [n]varchar(max) ani varbinary(max).
Technologia widoku XML
Definiując mapowanie między schematami XML a tabelami w bazie danych, należy utworzyć widok XML danych trwałych. Ładowanie zbiorcze XML może służyć do wypełniania bazowych tabel przy użyciu widoku XML. Można wykonywać zapytania do widoku XML za pomocą XPath w wersji 1.0. Zapytanie jest przekształcane na zapytania SQL dotyczące tabel. Podobnie aktualizacje są również propagowane do tych tabel.
Ta technologia jest przydatna w następujących sytuacjach:
Chcesz mieć model programowania skoncentrowany na formacie XML przy użyciu widoków XML dla istniejących danych relacyjnych.
Masz schemat (XSD, XDR) dla danych XML dostarczonych przez partnera zewnętrznego.
Kolejność nie jest ważna w danych lub dane tabeli zapytań nie są rekursywne lub maksymalna głębokość rekursji jest znana z wyprzedzeniem.
Chcesz wykonywać zapytania i modyfikować dane za pomocą widoku XML przy użyciu programu XPath w wersji 1.0.
Chcesz zbiorczo załadować dane XML i rozłożyć je do bazowych tabel przy użyciu widoku XML.
Przykłady obejmują dane relacyjne uwidocznione jako XML dla wymiany danych i usług sieci Web oraz dane XML ze stałym schematem. Więcej informacji.
Przykład: modelowanie danych przy użyciu schematu XML z adnotacjami (AXSD)
Na ilustracji załóżmy, że masz istniejące dane relacyjne, takie jak klienci, zamówienia i elementy wiersza, które mają być obsługiwane jako XML. Zdefiniuj widok XML przy użyciu usługi AXSD dla danych relacyjnych. Widok XML umożliwia zbiorcze ładowanie danych XML do tabel i wykonywanie zapytań oraz aktualizowanie danych relacyjnych przy użyciu widoku XML. Ten model jest przydatny, jeśli musisz wymieniać dane zawierające znaczniki XML z innymi aplikacjami, podczas gdy aplikacje SQL działają nieprzerwanie.
Model hybrydowy
Często kombinacja kolumn typu danych relacyjnych i xml jest odpowiednia do modelowania danych. Niektóre wartości z danych XML mogą być przechowywane w kolumnach relacyjnych, a reszta lub cała wartość XML przechowywana w kolumnie XML. Może to zapewnić lepszą wydajność, ponieważ masz większą kontrolę nad indeksami utworzonymi w kolumnach relacyjnych i właściwościach blokowania.
Wartości do przechowywania w kolumnach relacyjnych zależą od obciążenia. Jeśli na przykład pobierasz wszystkie wartości XML na podstawie wyrażenia ścieżki, /Customer/@CustId, przeniesienie wartości atrybutu CustId do kolumny relacyjnej i indeksowanie może przynieść szybsze działanie zapytań. Z drugiej strony, jeśli dane XML są obszernie i bez nadmiarowości rozłożone na kolumny relacyjne, koszt scalania może być znaczny.
Na przykład w przypadku wysoce ustrukturyzowanych danych XML zawartość tabeli została przekonwertowana na kod XML; Można mapować wszystkie wartości na kolumny relacyjne i ewentualnie używać technologii widoku XML.
Stopień szczegółowości danych XML
Stopień szczegółowości danych XML przechowywanych w kolumnie XML jest ważny w przypadku blokowania, a w mniejszym stopniu jest również ważne w przypadku aktualizacji. Program SQL Server używa tego samego mechanizmu blokowania zarówno dla danych XML, jak i innych niż XML. W związku z tym blokowanie na poziomie wiersza powoduje zablokowanie wszystkich wystąpień XML w wierszu. Gdy stopień szczegółowości jest duży, blokowanie dużych wystąpień XML dla aktualizacji powoduje spadek przepływności w scenariuszu z wieloma użytkownikami. Z drugiej strony, poważna dekompozycja traci inkapsulację obiektów i zwiększa koszt ponownego złożenia.
W dobrym projekcie ważna jest równowaga między wymaganiami dotyczącymi modelowania danych a blokowaniem i aktualizowaniem. Jednak w programie SQL Server rozmiar rzeczywistych przechowywanych wystąpień XML nie jest tak krytyczny.
Na przykład aktualizacje wystąpienia XML są wykonywane przy użyciu nowej obsługi częściowych danych binarnych dużych obiektów (BLOB) i częściowych aktualizacji indeksu, w których istniejące przechowywane wystąpienie XML jest porównywane ze zaktualizowaną wersją. Częściowa aktualizacja dużego obiektu binarnego (BLOB) wykonuje porównanie różnicowe między dwoma wystąpieniami XML i aktualizuje tylko różnice. Aktualizacje indeksu częściowego modyfikują tylko te wiersze, które muszą zostać zmienione w indeksie XML.
Ograniczenia typu danych XML
Zwróć uwagę na następujące ogólne ograniczenia dotyczące typu danych XML :
Przechowywana reprezentacja wystąpień typu danych XML nie może przekraczać 2 GB.
Nie można go użyć jako podtypu wystąpienia sql_variant .
Nie obsługuje rzutowania ani konwertowania na tekst lub ntekst. Zamiast tego użyj funkcji varchar(max) lub nvarchar(max).
Nie można go porównać ani posortować. Oznacza to, że w instrukcji GROUP BY nie można użyć typu danych XML .
Nie można go używać jako parametru do żadnych funkcji skalarnych, wbudowanych innych niż ISNULL, COALESCE i DATALENGTH.
Nie można jej używać jako kolumny klucza w indeksie. Można je jednak uwzględnić jako dane w indeksie klastrowanym lub jawnie dodane do indeksu nieklastrowanego przy użyciu słowa kluczowego INCLUDE po utworzeniu indeksu nieklastrowanego.
Elementy XML mogą być zagnieżdżone do 128 poziomów.