Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tento článek popisuje výhody a omezení datového typu XML v SQL Serveru a pomáhá zvolit, jak ukládat data XML.
Relační datový model nebo datový model XML
Pokud jsou vaše data vysoce strukturovaná se známým schématem, relační model bude pravděpodobně fungovat nejlépe pro úložiště dat. SQL Server poskytuje požadované funkce a nástroje, které možná budete potřebovat. Na druhou stranu, pokud je struktura částečně strukturovaná nebo nestrukturovaná nebo neznámá, musíte zvážit modelování těchto dat.
XML je dobrou volbou, pokud chcete model nezávislý na platformě zajistit přenositelnost dat pomocí strukturálních a sémantických značek. Navíc je to vhodná možnost, pokud jsou splněny některé z následujících vlastností:
Vaše data jsou řídká nebo neznáte strukturu dat nebo se v budoucnu může výrazně změnit struktura dat.
Vaše data představují hierarchii zahrnutí místo odkazů mezi entitami a mohou být rekurzivní.
Pořadí je součástí vašich dat.
Chcete se dotazovat na data nebo aktualizovat jejich části na základě jejich struktury.
Pokud není splněna žádná z těchto podmínek, měli byste použít relační datový model. Pokud jsou například vaše data ve formátu XML, ale vaše aplikace právě používá databázi k ukládání a načítání dat, sloupec [n]varchar(max) je vše, co potřebujete. Ukládání dat ve sloupci XML má další výhody. To zahrnuje, že modul určuje, že data jsou správně vytvořená nebo platná, a zahrnuje také podporu jemně odstupňovaného dotazu a aktualizací dat XML.
Důvody pro ukládání dat XML na SQL Serveru
Tady je několik důvodů, proč používat nativní funkce XML v SQL Serveru místo správy dat XML v systému souborů:
Chcete sdílet, dotazovat a upravovat data XML efektivním a transactovaným způsobem. Jemně odstupňovaný přístup k datům je pro vaši aplikaci důležitý. Můžete například chtít extrahovat některé oddíly v dokumentu XML nebo můžete chtít vložit nový oddíl bez nahrazení celého dokumentu.
Máte relační data a data XML a chcete interoperabilitu mezi relačními i XML daty v rámci vaší aplikace.
Potřebujete podporu jazyka pro dotazování a úpravy dat pro aplikace napříč doménou.
Chcete, aby server zajistil, že jsou data správně vytvořená, a volitelně také ověří data podle schémat XML.
Chcete indexovat XML data pro efektivní zpracování dotazů a dobrou škálovatelnost spolu s použitím špičkového optimalizátoru dotazů.
Chcete získat přístup k datům XML pomocí protokolu SOAP, ADO.NET a OLE DB.
Ke správě dat XML chcete použít funkci správy databázového serveru. Může to být například zálohování, obnovení a replikace.
Pokud není splněna žádná z těchto podmínek, může být lepší ukládat data jako jiný než XML, velký typ objektu, například
Možnosti úložiště XML
Možnosti úložiště pro XML na SQL Serveru zahrnují následující:
Nativní úložiště jako datový typ XML
Data jsou uložena v interní reprezentaci, která zachovává obsah XML dat. Tato interní reprezentace obsahuje informace o hierarchii zahrnutí, pořadí dokumentů a hodnotách elementů a atributů. Konkrétně se zachová obsah infoset dat XML. Další informace o InfoSet naleznete v tématu http://www.w3.org/TR/xml-infoset. Obsah InfoSet nemusí být identickou kopií textového kódu XML, protože následující informace se nezachovají: nevýznamné prázdné znaky, pořadí atributů, předpony oboru názvů a deklarace XML.
Pro datový typ xml, který je vázán na schémata XML, nástroj post-schema validation InfoSet (PSVI) přidává informace o typu do InfoSetu a kóduje je v interní reprezentaci. Tím se výrazně zlepšuje rychlost analýzy. Pro více informací nahlédněte do specifikací schémat XML W3C na http://www.w3.org/TR/xmlschema-1 a http://www.w3.org/TR/xmlschema-2.
Mapování mezi XML a relačním úložištěm
Pomocí anotovaného schématu (AXSD) se XML rozdělí do sloupců v jedné nebo více tabulkách. Tím se zachová věrnost dat na relační úrovni. V důsledku toho je hierarchická struktura zachována, i když pořadí mezi prvky je ignorováno. Schéma nemůže být rekurzivní.
Velké úložiště objektů, [n]varchar(max) a varbinary(max)
Je uložena identická kopie dat. To je užitečné pro speciální aplikace, jako jsou právní dokumenty. Většina aplikací nevyžaduje přesnou kopii a je spokojená s obsahem XML (věrnost InfoSet).
Obecně platí, že budete muset použít kombinaci těchto přístupů. Můžete například chtít uložit data XML do sloupce datového typu XML a zvýšit jejich vlastnosti na relační sloupce. Nebo můžete chtít použít technologii mapování k ukládání nerekurzivních částí ve sloupcích bez XML a pouze rekurzivní části ve sloupcích datového typu XML .
Volba technologie XML
Volba technologie XML, tedy mezi nativním XML a zobrazením XML, obecně závisí na následujících faktorech:
Možnosti úložiště
Vaše XML data mohou být vhodnější pro velké úložiště objektů (například příručku k produktu) nebo lépe vhodné pro uložení v relačních databázových sloupcích (například řádková položka převedená na XML). Každá možnost úložiště zachovává věrnost dokumentu v jiném rozsahu.
Možnosti dotazů
Jednu možnost úložiště můžete najít vhodnější než jinou, na základě povahy dotazů a rozsahu, do kterého se dotazujete na data XML. Jemně odstupňovaný dotaz na data XML, například vyhodnocení predikátu na uzlech XML, se podporuje v různých stupních v těchto dvou možnostech úložiště.
Indexování dat XML
Možná budete chtít indexovat data XML, aby se urychlil výkon dotazů XML. Možnosti indexování se liší podle možností úložiště; musíte zvolit správnou volbu pro optimalizaci úloh.
Možnosti úprav dat
Některé úlohy zahrnují jemně odstupňované úpravy dat XML. To může například zahrnovat přidání nového oddílu do dokumentu, zatímco jiné úlohy, jako je webový obsah, ne. Podpora jazyka úprav dat může být pro vaši aplikaci důležitá.
Podpora schématu
Data XML mohou být popsána schématem, které může nebo nemusí být dokument schématu XML. Podpora xml vázaného na schéma závisí na technologii XML.
Různé volby mají také různé charakteristiky výkonu.
Nativní úložiště XML
Data XML můžete uložit do sloupce datového typu XML na serveru. Toto je vhodná volba, pokud platí následující:
Chcete jednoduchý způsob, jak ukládat data XML na server a současně zachovat pořadí dokumentů a strukturu dokumentů.
Možná nebo nemáte schéma pro data XML.
Chcete provádět dotazy a upravovat vaše XML data.
Chcete indexovat data XML pro rychlejší zpracování dotazů.
Vaše aplikace potřebuje zobrazení systémového katalogu ke správě dat XML a schémat XML.
Nativní úložiště XML je užitečné, pokud máte dokumenty XML, které mají řadu struktur, nebo máte dokumenty XML, které odpovídají různým nebo složitým schématům, které jsou příliš obtížné namapovat na relační struktury.
Příklad: Modelování dat XML pomocí datového typu XML
Představte si příručku k produktu ve formátu XML, která je tvořena samostatnou kapitolou pro každé téma a která obsahuje více oddílů v každé kapitole. Oddíl může obsahovat pododdíly. Výsledkem <section> je rekurzivní prvek. Příručky k produktu obsahují velké množství smíšeného obsahu, diagramů a technického materiálu; data jsou částečně strukturovaná. Uživatelé mohou chtít provést kontextové vyhledávání témat, která vás zajímají, například vyhledat oddíl "clusterovaný index" v kapitole věnované indexování a dotazovat se na technická množství.
Vhodným modelem úložiště pro dokumenty XML je sloupec datového typu XML . Tím se zachová obsah informační sady dat XML. Indexování sloupce XML zlepšuje výkon dotazů.
Příklad: Zachování přesných kopií dat XML
Pro ilustraci předpokládejme, že vládní předpisy vyžadují, abyste si zachovali přesné textové kopie dokumentů XML. Může se jednat například o podepsané dokumenty, právní dokumenty nebo objednávky transakcí akcií. Dokumenty můžete chtít uložit do sloupce [n]varchar(max ).
Pro dotazování převeďte data na datový typ XML za běhu a spusťte na něm XQuery. Převod za běhu může být nákladný, zejména pokud je dokument velký. Pokud se dotazujete často, můžete dokumenty redundantně uložit do sloupce datového typu XML a indexovat je, zatímco vracíte přesné kopie dokumentu ze sloupce [n]varchar(max).
Sloupec XML může být počítaný sloupec, který je založen na sloupci [n]varchar(max). Na sloupcích [n]varchar(max) ani varbinary(max) nelze vytvořit index XML, stejně jako nelze vytvořit index XML pro počítaný sloupec XML.
Technologie zobrazení XML
Definováním mapování mezi schématy XML a tabulkami v databázi vytvoříte zobrazení XML trvalých dat. Hromadné načítání XML lze použít k naplnění podkladových tabulek pomocí zobrazení XML. Zobrazení XML můžete dotazovat pomocí XPath verze 1.0; dotaz se přeloží na dotazy SQL v tabulkách. Podobně se aktualizace rozšíří také do těchto tabulek.
Tato technologie je užitečná v následujících situacích:
Chcete mít programovací model orientovaný na XML pomocí zobrazení XML nad existujícími relačními daty.
Máte schéma (XSD, XDR) pro data XML, které mohl poskytnout externí partner.
Pořadí není ve vašich datech důležité nebo data tabulky dotazů nejsou rekurzivní nebo je předem známa maximální hloubka rekurze.
Chcete dotazovat a upravit data prostřednictvím zobrazení XML pomocí XPath verze 1.0.
Chcete hromadně načíst data XML a rozložit je do podkladových tabulek pomocí zobrazení XML.
Mezi příklady patří relační data vystavená jako XML pro výměnu dat a webové služby a data XML s pevným schématem. Další informace.
Příklad: Modelování dat pomocí anotovaného schématu XML (AXSD)
Pro ilustraci předpokládejme, že máte existující relační data, jako jsou zákazníci, objednávky a řádkové položky, které chcete zpracovat jako XML. Definujte zobrazení XML pomocí AXSD přes relační data. Zobrazení XML umožňuje hromadně načítat data XML do tabulek a dotazovat a aktualizovat relační data pomocí zobrazení XML. Tento model je užitečný, pokud potřebujete vyměňovat data, která obsahují kód XML s jinými aplikacemi, zatímco aplikace SQL fungují bez přerušení.
Hybridní model
Často je pro modelování dat vhodná kombinace relačních sloupců a sloupců datových typů XML . Některé hodnoty z dat XML lze uložit v relačních sloupcích a zbytek nebo celá hodnota XML uložená ve sloupci XML. Může to přinést lepší výkon tím, že máte větší kontrolu nad indexy vytvořenými na relačních sloupcích a charakteristiky zamykání.
Hodnoty, které se mají uložit v relačních sloupcích, závisí na vaší úloze. Pokud například načtete všechny hodnoty XML na základě výrazu cesty, /Customer/@CustId, zvýšit úroveň hodnoty atributu CustId do relačního sloupce a jeho indexování může přinést rychlejší výkon dotazů. Na druhou stranu, pokud jsou vaše data XML značně a neobsazeně rozložená do relačních sloupců, mohou být náklady na opětovné sestavení významné.
Pro vysoce strukturovaná data XML, například obsah tabulky byl převeden na XML; Můžete mapovat všechny hodnoty na relační sloupce a případně použít technologii zobrazení XML.
Členitost dat XML
Členitost dat XML uložených ve sloupci XML je důležitá pro uzamčení a do menší míry je také důležitá pro aktualizace. SQL Server používá stejný mechanismus uzamčení pro data XML i jiná data než XML. Uzamčení na úrovni řádků proto způsobí uzamčení všech instancí XML v řádku. Pokud je členitost velká, uzamčení velkých instancí XML pro aktualizace způsobí pokles propustnosti ve scénáři s více uživateli. Na druhou stranu významná dekompozice přichází o zapouzdření objektu a zvyšuje náklady na znovusestavení.
Pro dobrý návrh je důležitá rovnováhu mezi požadavky na modelování dat a uzamčením a charakteristikou aktualizací. V SQL Serveru ale velikost skutečných uložených instancí XML není tak kritická.
Například aktualizace instance XML se provádějí pomocí nové podpory částečného binárního velkého objektu (BLOB) a částečné aktualizace indexu, ve kterých se stávající uložená instance XML porovnává s aktualizovanou verzí. Částečná aktualizace binárního velkého objektu (BLOB) provádí rozdílové porovnání mezi dvěma instancemi XML a aktualizuje pouze rozdíly. Částečné aktualizace indexu upravují pouze řádky, které je nutné změnit v indexu XML.
Omezení datového typu XML
Všimněte si následujících obecných omezení, která platí pro datový typ XML :
Uložená reprezentace instancí datového typu XML nesmí překročit 2 GB.
Nedá se použít jako podtyp instance sql_variant .
Nepodporuje přetypování ani převod na text nebo ntext. Místo toho použijte varchar(max) nebo nvarchar(max).
Nedá se porovnávat ani řadit. To znamená, že datový typ XML nelze použít v příkazu GROUP BY.
Nedá se použít jako parametr pro žádné skalární předdefinované funkce jiné než ISNULL, COALESCE a DATALENGTH.
Nedá se použít jako klíčový sloupec v indexu. Může být však zahrnuta jako data v clusterovém indexu nebo explicitně přidána do neclusterovaného indexu pomocí klíčového slova INCLUDE při vytvoření neclusterovaného indexu.
Elementy XML můžou být vnořené až do 128 úrovní.