Bagikan melalui


jenis dan kolom data xml (SQL Server)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Artikel ini membahas keuntungan dan batasan tipe data xml di SQL Server, dan membantu Anda memilih cara menyimpan data XML.

Model data relasional atau XML

Jika data Anda sangat terstruktur dengan skema yang diketahui, model relasional kemungkinan akan berfungsi paling baik untuk penyimpanan data. SQL Server menyediakan fungsionalitas dan alat yang diperlukan yang mungkin Anda butuhkan. Di sisi lain, jika struktur semi terstruktur atau tidak terstruktur, atau tidak diketahui, Anda harus memberikan pertimbangan untuk memodelkan data tersebut.

XML adalah pilihan yang baik jika Anda menginginkan model independen platform untuk memastikan portabilitas data dengan menggunakan markup struktural dan semantik. Selain itu, ini adalah opsi yang sesuai jika beberapa properti berikut ini terpenuhi:

  • Data Anda jarang atau Anda tidak mengetahui struktur data, atau struktur data Anda dapat berubah secara signifikan di masa mendatang.

  • Data Anda mewakili hierarki penahanan, alih-alih referensi di antara entitas, dan mungkin rekursif.

  • Urutan melekat dalam data Anda.

  • Anda ingin mengkueri ke dalam data atau memperbarui bagian-bagiannya, berdasarkan strukturnya.

Jika tidak ada kondisi ini yang terpenuhi, Anda harus menggunakan model data relasional. Misalnya, jika data Anda dalam format XML tetapi aplikasi Anda hanya menggunakan database untuk menyimpan dan mengambil data, kolom [n]varchar(max) adalah semua yang Anda butuhkan. Menyimpan data dalam kolom XML memiliki manfaat tambahan. Ini termasuk memiliki mesin yang menentukan bahwa data terbentuk dengan baik atau valid, dan juga mencakup dukungan untuk kueri dan pembaruan menenangkan ke dalam data XML.

Alasan untuk menyimpan data XML di SQL Server

Berikut adalah beberapa alasan untuk menggunakan fitur XML asli di SQL Server alih-alih mengelola data XML Anda dalam sistem file:

  • Anda ingin berbagi, mengkueri, dan memodifikasi data XML Anda dengan cara yang efisien dan bertransaksi. Akses data menenangkan penting untuk aplikasi Anda. Misalnya, Anda mungkin ingin mengekstrak beberapa bagian dalam dokumen XML, atau Anda mungkin ingin menyisipkan bagian baru tanpa mengganti seluruh dokumen Anda.

  • Anda memiliki data relasional dan data XML dan Anda menginginkan interoperabilitas antara data relasional dan XML dalam aplikasi Anda.

  • Anda memerlukan dukungan bahasa untuk kueri dan modifikasi data untuk aplikasi lintas domain.

  • Anda ingin server menjamin bahwa data terbentuk dengan baik dan juga secara opsional memvalidasi data Anda sesuai dengan skema XML.

  • Anda ingin pengindeksan data XML untuk pemrosesan kueri yang efisien dan skalabilitas yang baik, dan penggunaan pengoptimal kueri tingkat pertama.

  • Anda menginginkan akses SOAP, ADO.NET, dan OLE DB ke data XML.

  • Anda ingin menggunakan fungsionalitas administratif server database untuk mengelola data XML Anda. Misalnya, ini akan menjadi pencadangan, pemulihan, dan replikasi.

Jika tidak ada kondisi ini yang terpenuhi, mungkin lebih baik menyimpan data Anda sebagai non-XML, jenis objek besar, seperti [n]varchar(max) atau varbinary(max).

Opsi penyimpanan XML

Opsi penyimpanan untuk XML di SQL Server mencakup yang berikut ini:

  • Penyimpanan asli sebagai jenis data xml

    Data disimpan dalam representasi internal yang mempertahankan konten XML data. Representasi internal ini mencakup informasi tentang hierarki penahanan, urutan dokumen, dan elemen dan nilai atribut. Secara khusus, konten InfoSet dari data XML dipertahankan. Untuk informasi selengkapnya tentang InfoSet, kunjungi http://www.w3.org/TR/xml-infoset. Konten InfoSet mungkin bukan salinan XML teks yang identik, karena informasi berikut tidak dipertahankan: spasi putih yang tidak signifikan, urutan atribut, awalan namespace, dan deklarasi XML.

    Untuk jenis data xml yang diketik, jenis data xml yang terikat ke skema XML, InfoSet validasi pasca-skema (PSVI) menambahkan informasi jenis ke InfoSet dan dikodekan dalam representasi internal. Ini meningkatkan kecepatan penguraian secara signifikan. Untuk informasi selengkapnya, lihat spesifikasi Skema XML W3C di http://www.w3.org/TR/xmlschema-1 dan http://www.w3.org/TR/xmlschema-2.

  • Pemetaan antara XML dan penyimpanan relasional

    Dengan menggunakan skema yang diannotasi (AXSD), XML diurai menjadi kolom dalam satu atau beberapa tabel. Ini mempertahankan keakuratan data di tingkat relasional. Akibatnya, struktur hierarki dipertahankan meskipun urutan di antara elemen diabaikan. Skema tidak bisa rekursif.

  • Penyimpanan objek besar, [n]varchar(maks) dan varbinary(maks)

    Salinan data yang identik disimpan. Ini berguna untuk aplikasi tujuan khusus seperti dokumen hukum. Sebagian besar aplikasi tidak memerlukan salinan yang tepat dan puas dengan konten XML (keakuratan InfoSet).

Umumnya, Anda mungkin harus menggunakan kombinasi pendekatan ini. Misalnya, Anda mungkin ingin menyimpan data XML Anda di kolom tipe data xml dan mempromosikan properti darinya ke dalam kolom relasional. Atau, Anda mungkin ingin menggunakan teknologi pemetaan untuk menyimpan bagian nonrekursif di kolom non-XML dan hanya bagian rekursif dalam kolom jenis data xml .

Pilihan teknologi XML

Pilihan teknologi XML, tampilan XML versus XML asli, umumnya tergantung pada faktor-faktor berikut:

  • Opsi penyimpanan

    Data XML Anda mungkin lebih sesuai untuk penyimpanan objek besar (misalnya, manual produk), atau lebih mudah disimpan dalam kolom relasional (misalnya, item baris yang dikonversi ke XML). Setiap opsi penyimpanan mempertahankan keakuratan dokumen ke tingkat yang berbeda.

  • Kemampuan kueri

    Anda mungkin menemukan satu opsi penyimpanan yang lebih tepat daripada opsi lainnya, berdasarkan sifat kueri Anda dan sejauh mana Anda mengkueri data XML Anda. Kueri data XML Anda yang halus, misalnya, evaluasi predikat pada simpul XML, didukung untuk berbagai derajat dalam dua opsi penyimpanan.

  • Mengindeks data XML

    Anda mungkin ingin mengindeks data XML untuk mempercepat performa kueri XML. Opsi pengindeksan bervariasi menurut opsi penyimpanan; Anda harus membuat pilihan yang sesuai untuk mengoptimalkan beban kerja Anda.

  • Kemampuan modifikasi data

    Beberapa beban kerja melibatkan modifikasi data XML yang terperintah. Misalnya, ini dapat mencakup penambahan bagian baru dalam dokumen, sementara beban kerja lain, seperti konten Web, tidak. Dukungan bahasa modifikasi data mungkin penting untuk aplikasi Anda.

  • Dukungan skema

    Data XML Anda mungkin dijelaskan oleh skema yang mungkin atau mungkin bukan dokumen skema XML. Dukungan untuk XML terikat skema tergantung pada teknologi XML.

Pilihan yang berbeda juga memiliki karakteristik performa yang berbeda.

Penyimpanan XML asli

Anda dapat menyimpan data XML Anda di kolom tipe data xml di server. Ini adalah pilihan yang sesuai jika berikut ini berlaku:

  • Anda menginginkan cara mudah untuk menyimpan data XML Anda di server dan, pada saat yang sama, mempertahankan urutan dokumen dan struktur dokumen.

  • Anda mungkin atau mungkin tidak memiliki skema untuk data XML Anda.

  • Anda ingin mengkueri dan mengubah data XML Anda.

  • Anda ingin mengindeks data XML untuk pemrosesan kueri yang lebih cepat.

  • Aplikasi Anda memerlukan tampilan katalog sistem untuk mengelola data XML dan skema XML Anda.

Penyimpanan XML asli berguna ketika Anda memiliki dokumen XML yang memiliki berbagai struktur, atau Anda memiliki dokumen XML yang sesuai dengan skema yang berbeda atau kompleks yang terlalu sulit dipetakan ke struktur relasional.

Contoh: Data XML model menggunakan jenis data xml

Pertimbangkan manual produk dalam format XML yang terdiri dari bab terpisah untuk setiap topik dan yang memiliki beberapa bagian dalam setiap bab. Bagian dapat berisi subbagian. Akibatnya, <section> adalah elemen rekursif. Manual produk berisi sejumlah besar konten campuran, diagram, dan materi teknis; data semi-terstruktur. Pengguna mungkin ingin melakukan pencarian kontekstual untuk topik yang menarik seperti mencari bagian tentang "indeks terkluster" dalam bab tentang "pengindeksan", dan mengkueri jumlah teknis.

Model penyimpanan yang sesuai untuk dokumen XML Anda adalah kolom jenis data xml . Ini mempertahankan konten InfoSet data XML Anda. Mengindeks performa kueri manfaat kolom XML.

Contoh: Pertahankan salinan data XML yang tepat

Untuk ilustrasi, asumsikan bahwa peraturan pemerintah mengharuskan Anda untuk mempertahankan salinan tekstual yang tepat dari dokumen XML Anda. Misalnya, ini dapat mencakup dokumen yang ditandatangani, dokumen hukum, atau pesanan transaksi saham. Anda mungkin ingin menyimpan dokumen Anda di kolom [n]varchar(maks).

Untuk kueri, konversikan data ke jenis data xml pada waktu proses dan jalankan XQuery di dalamnya. Konversi run-time mungkin mahal, terutama ketika dokumen besar. Jika Anda sering mengkueri, Anda dapat menyimpan dokumen secara berlebihan di kolom tipe data xml dan mengindeksnya saat Anda mengembalikan salinan dokumen yang tepat dari kolom [n]varchar(maks).

Kolom XML mungkin merupakan kolom komputasi, berdasarkan kolom [n]varchar(maks). Namun, Anda tidak dapat membuat indeks XML pada kolom XML komputasi, xml, atau indeks XML tidak dapat dibangun di kolom [n]varchar(max) atau varbinary(max).

Teknologi tampilan XML

Dengan menentukan pemetaan antara skema XML Anda dan tabel dalam database, Anda membuat tampilan XML dari data persisten Anda. Beban massal XML dapat digunakan untuk mengisi tabel yang mendasar dengan menggunakan tampilan XML. Anda bisa mengkueri tampilan XML dengan menggunakan XPath versi 1.0; kueri diterjemahkan ke kueri SQL pada tabel. Demikian pula, pembaruan juga disebarluaskan ke tabel tersebut.

Teknologi ini berguna dalam situasi berikut:

  • Anda ingin memiliki model pemrograman xml-sentris menggunakan tampilan XML atas data relasional yang ada.

  • Anda memiliki skema (XSD, XDR) untuk data XML yang mungkin disediakan mitra eksternal.

  • Urutan tidak penting dalam data Anda, atau data tabel kueri Anda tidak rekursif, atau kedalaman rekursi maksimal diketahui terlebih dahulu.

  • Anda ingin mengkueri dan mengubah data melalui tampilan XML dengan menggunakan XPath versi 1.0.

  • Anda ingin memuat data XML secara massal dan menguraikannya ke dalam tabel yang mendasar dengan menggunakan tampilan XML.

Contohnya termasuk data relasional yang diekspos sebagai XML untuk pertukaran data dan layanan Web, dan data XML dengan skema tetap. Untuk informasi selengkapnya.

Contoh: Data model menggunakan skema XML yang dianomasi (AXSD)

Untuk ilustrasi, asumsikan bahwa Anda memiliki data relasional yang ada, seperti pelanggan, pesanan, dan item baris, yang ingin Anda tangani sebagai XML. Tentukan tampilan XML dengan menggunakan AXSD melalui data relasional. Tampilan XML memungkinkan Anda memuat data XML secara massal ke dalam tabel dan mengkueri dan memperbarui data relasional dengan menggunakan tampilan XML. Model ini berguna jika Anda harus bertukar data yang berisi markup XML dengan aplikasi lain saat aplikasi SQL Anda bekerja tanpa gangguan.

Model hibrid

Sering kali, kombinasi kolom jenis data relasional dan xml sesuai untuk pemodelan data. Beberapa nilai dari data XML Anda dapat disimpan dalam kolom relasional, dan sisanya, atau seluruh nilai XML yang disimpan dalam kolom XML. Ini dapat menghasilkan performa yang lebih baik karena Anda memiliki lebih banyak kontrol atas indeks yang dibuat pada kolom relasional dan karakteristik penguncian.

Nilai yang akan disimpan dalam kolom relasional bergantung pada beban kerja Anda. Misalnya, jika Anda mengambil semua nilai XML berdasarkan ekspresi jalur, /Customer/@CustId, mempromosikan nilai CustId atribut ke dalam kolom relasional dan mengindeksnya dapat menghasilkan performa kueri yang lebih cepat. Di sisi lain, jika data XML Anda diurai secara ekstensif dan tidak terurai menjadi kolom relasional, biaya rakitan ulang mungkin signifikan.

Untuk data XML yang sangat terstruktur, misalnya, konten tabel telah dikonversi menjadi XML; Anda dapat memetakan semua nilai ke kolom relasional, dan mungkin menggunakan teknologi tampilan XML.

Granularitas data XML

Granularitas data XML yang disimpan dalam kolom XML penting untuk penguncian dan, ke tingkat yang lebih rendah, penting juga untuk pembaruan. SQL Server menggunakan mekanisme penguncian yang sama untuk data XML dan non-XML. Oleh karena itu, penguncian tingkat baris menyebabkan semua instans XML dalam baris dikunci. Ketika granularitas besar, mengunci instans XML besar untuk pembaruan menyebabkan throughput menurun dalam skenario multipengguna. Di sisi lain, penguraian parah kehilangan enkapsulasi objek dan meningkatkan biaya perakitan ulang.

Keseimbangan antara persyaratan pemodelan data dan karakteristik penguncian dan pembaruan penting untuk desain yang baik. Namun, di SQL Server, ukuran instans XML aktual yang disimpan tidak terlalu penting.

Misalnya, pembaruan untuk instans XML dilakukan dengan menggunakan dukungan baru untuk pembaruan objek besar biner parsial (BLOB) dan indeks parsial di mana instans XML yang disimpan yang ada dibandingkan dengan versi yang diperbarui. Pembaruan objek besar biner parsial (BLOB) melakukan perbandingan diferensial antara dua instans XML dan hanya memperbarui perbedaan. Pembaruan indeks parsial hanya mengubah baris yang harus diubah dalam indeks XML.

Batasan tipe data xml

Perhatikan batasan umum berikut yang berlaku untuk jenis data xml :

  • Representasi instans jenis data xml yang disimpan tidak boleh melebihi 2 GB.

  • Ini tidak dapat digunakan sebagai subjenis instans sql_variant .

  • Ini tidak mendukung transmisi atau konversi ke teks atau ntext. Gunakan varchar(max) atau nvarchar(max) sebagai gantinya.

  • Ini tidak dapat dibandingkan atau diurutkan. Ini berarti tipe data xml tidak dapat digunakan dalam pernyataan GROUP BY.

  • Ini tidak dapat digunakan sebagai parameter untuk fungsi bawaan skalar apa pun selain ISNULL, COALESCE, dan DATALENGTH.

  • Ini tidak dapat digunakan sebagai kolom kunci dalam indeks. Namun, ini dapat disertakan sebagai data dalam indeks berkluster atau secara eksplisit ditambahkan ke indeks non-kluster dengan menggunakan kata kunci INCLUDE saat indeks non-kluster dibuat.

  • Elemen XML dapat ditumpuk hingga 128 tingkat.

Lihat juga