Kapan saya harus menggunakan tipe data XML dalam SQL Server?

15

Kapan saya harus menggunakan tipe data XML di Microsoft SQL Server?

FarligOpptreden
sumber

Jawaban:

1

Saya telah melakukan hal serupa di mana saya membuat serialisasi data objek ke XML untuk penyimpanan. Ini menghilangkan beban memiliki tabel, kolom, dan hubungan di tempat untuk menyimpan data untuk objek yang kompleks. Proses dapat dibantu dengan menggunakan skema yang sesuai dengan hasil XML, dan tabel database dapat digunakan untuk informasi meta tentang objek yang dimaksud. Dalam kasus saya, memperluas skema basis data untuk mengakomodasi tata letak objek akan menjadi tugas besar!

Grant Palin
sumber
Jawaban ini paling cocok dengan pendapat saya. Anda dapat meminta data yang mendasarinya menggunakan XQuery juga jika Anda perlu mengembalikan dataset berbasis tabel normal atau membangun format baru untuk hasilnya. Pertanyaan saya awalnya diajukan ketika layak untuk menggunakan XML, dengan menyatakan bahwa saya memiliki pendapat sendiri dan ingin mendengar pendapat orang lain dan jawaban Anda menjelaskan kasus penggunaan yang layak dan aktual untuk XML.
FarligOpptreden
11

Secara pribadi, saya belum pernah menggunakan tipe bidang XML dalam SQL Server sebelumnya, dan saya telah melakukan banyak pemrograman basis data sejak mereka menambahkan fitur ini. Sepertinya selalu ada overhead program dan kinerja untuk menggunakan konten XML dalam basis data secara asli. Jujur saya pikir itu tipuan, karena semua orang berada di kereta XML pada satu titik di awal 2000-an. "Oh XML itu panas, jadi mari kita tambahkan ke SQL Server sehingga kita tidak terlihat ketinggalan jaman."

Kasus bisnis terbaik yang dapat saya lihat mungkin dalam merekam pesan data berbasis XML yang telah Anda terima di mana Anda mungkin ingin mengintip struktur dan datanya, tetapi ingin mempertahankan integritas pesan asli untuk alasan bisnis atau hukum. Overhead mungkin terlalu bagus untuk menerjemahkan XML ke dalam struktur tabel, tetapi menggunakan kemampuan XML dalam SQL Server mungkin hanya mengurangi biaya memeriksa data yang cukup untuk menjamin menggunakannya.

Mungkin ada banyak alasan lain mengapa Anda ingin menggunakannya, tetapi terus terang saya pikir Anda harus mempertimbangkan jalan lain menuju kebahagiaan sebelum menjadi hog-liar dengan XML di SQL Server kecuali Anda memiliki alasan bisnis yang sangat spesifik untuk melakukannya. Gunakan bidang varchar (maks) atau teks jika lebih masuk akal.

Pendapat saya saja, tentu saja :)

CokoBWare
sumber
Saya tahu ini adalah a) tahun setelah memposting jawaban asli ini, dan b) belum tentu relevan dengan XML, tapi saya masih merasakan hal yang sama tentang XML seperti yang sekarang saya rasakan tentang dimasukkannya metode JSON dalam SQL Server.
CokoBWare
Saya kira munculnya pilihan penyimpanan NoSQL (dan hibrid) modern membuat pertanyaan asli menjadi berlebihan, karena pendapat saya saat itu lebih diarahkan untuk menyimpan data yang tidak terstruktur dengan cara yang tidak akan membuat skema misterius dalam database.
FarligOpptreden
8

Saya hanya menemui beberapa skenario di mana saya akan secara aktif mengejar penggunaan tipe data XML dalam SQL Server. Ini di luar kepala saya, agar dari yang paling tidak menarik:

  • Menyimpan / mengarsipkan respons XML yang dihasilkan oleh aplikasi lain
    • Sebagai contoh, kami menggunakan Application Integration Framework (AIF) untuk berkomunikasi antara aplikasi Silverlight khusus dan Dynamics AX. Kami menyimpan pesan masuk dan keluar dalam database untuk membantu pemecahan masalah komunikasi antara aplikasi-aplikasi tersebut
    • Karena tipe bidangnya adalah XML dan bukan tipe string generik (yaitu VARCHAR), kami dapat menggunakan XQuery untuk secara khusus mencari pesan yang cocok dengan beberapa kriteria tertentu. Ini akan jauh lebih sulit dengan pencocokan SEPERTI string sederhana
  • Menyalin / mempertahankan pesan respons yang dibuat
    • Perbarui bidang XML dengan pemicu atau kode aplikasi, yang akan meniru kolom yang dihitung
    • Alih-alih terus-menerus membuat kembali respons XML ke aplikasi berbasis panggilan, Anda akan dikenai biaya tambahan saat baris dinaikkan, daripada setiap panggilan
    • Ini bekerja paling baik ketika SELECT jauh lebih sering daripada pemutakhiran / masukkan, yang cenderung berlaku untuk sebagian besar aplikasi
  • Menyimpan banyak nilai dalam satu bidang
    • Salah satu praktik yang saya lihat adalah penggunaan tipe data XML untuk menyimpan koleksi nilai dalam satu bidang
    • Salah satu manfaatnya adalah Anda tidak perlu mendesain set tabel tambahan untuk penyimpanan kunci / nilai sederhana
    • Kelemahan dari ini adalah bahwa data tidak sepenuhnya dinormalisasi, membuat kueri kurang jelas
    • Namun, seperti yang disebutkan di atas, Anda dapat menggunakan XQuery pada bidang XML itu untuk memilih baris yang cocok dengan kriteria identifikasi, dengan demikian secara parsial menghilangkan dampak dari tidak sepenuhnya dinormalisasi.

Semua yang mengatakan, 99% dari waktu, saya sama sekali tidak perlu untuk bidang XML saat merancang skema.

Taylor Gerring
sumber
4

Beberapa kali saya melihat tipe data XML di SQL server pada dasarnya telah digunakan sebagai bidang yang telah ditanyakan seperti yang lain dalam database, yang dapat memiliki beberapa implikasi kinerja yang sangat buruk jika Anda memiliki sejumlah besar data . Ada alasan yang disebut SQL server dan bukan XML server. :-) Kueri yang bertentangan dengan XML tidak secepat permintaan pilih biasa.

Saya bisa melihatnya digunakan untuk menyimpan XML yang tidak terlalu banyak ditanya, katakanlah menyimpan dokumen XML lengkap dalam tipe data XML, tetapi memiliki bidang yang dapat dicari (kunci) disimpan secara terpisah dengan dokumen XML. Dengan begitu Anda dapat meminta informasi Anda lebih cepat dan menarik dokumen XML ketika Anda sampai pada titik di mana Anda ingin melihat dokumen lengkap. Saya sebenarnya harus kembali dan melakukan ini dengan sejumlah aplikasi di mana orang telah mencoba menggunakan tipe data XML sebagai bidang yang sangat ditanyakan dan data telah berkembang ke titik di mana kueri menjadi terlalu lambat.

mwgriffith
sumber
4

Saya telah menggunakan bidang tipe XML sebagian besar untuk tujuan logging yang terkait dengan layanan web ASMX atau layanan WCF. Anda dapat menyimpan permintaan atau pesan respons.

Sebagian besar waktu, Anda menyimpan XML dalam DB untuk tujuan referensi - bukan untuk aktivitas bisnis reguler Anda (bukan untuk meminta setiap 5 detik dari kode). Jika Anda mendapati diri Anda melakukannya, tentukan bidang yang biasanya Anda tanyakan atau gunakan sebagian besar waktu dan buat kolom terpisah untuknya. Dengan begitu, saat Anda menyimpan XML ke DB, Anda bisa mengekstrak bidang ini dan menyimpannya ke kolom terkait. Kemudian saat mengambilnya, Anda tidak perlu menanyakan dokumen XML. Anda bisa menggunakan kolom yang Anda buat untuk tujuan ini.

Hidup lebih dari ini
sumber
1

Ini adalah skenario yang langsung terlintas di pikiran ketika mempertimbangkan kondisi apa yang perlu ada untuk mengizinkan bidang Xml di Sql Server:

  • data biner dikodekan untuk pertukaran di mana Anda ingin kontrol seperti asam dari sumber daya
  • mendokumentasikan fragmen yang akan disusun kembali secara keseluruhan menggunakan informasi dinamis
  • dokumen atau fragmen yang dikirimkan pengguna yang ingin Anda isolasi dan setidaknya secara sementara jauhkan sistem file secara langsung.
JustinC
sumber
-2

Saya menggunakan XML secara luas di aplikasi client-server untuk menyimpan data terstruktur dalam satu panggilan ke database. Sebagai contoh, ambil Faktur dengan baris Detail. Sangat mudah untuk membuat klien mem-serialkan objek bisnis ke dalam XML dan meneruskannya ke proc yang tersimpan dalam satu panggilan. Proc memutuskan apakah perlu memasukkan atau memperbarui; itu bisa mendapatkan ID faktur induk (kolom identitas) untuk ditetapkan ke catatan detail, semua dalam transaksi sisi server dan tanpa klien harus melakukan beberapa perjalanan bolak-balik. Saya tidak memerlukan 20 atau lebih parameter untuk menentukan catatan header dan saya tidak perlu membuat panggilan untuk setiap baris faktur. Juga, seringkali dimungkinkan untuk membuat perubahan skema, atau memperkenalkan logging / audit, tanpa harus menyentuh klien.

Rik Bradley
sumber
Saya bingung mengapa downvotes. Adakah downvoter yang peduli untuk mencerahkan saya?
Rik Bradley