Kapan saya harus menggunakan tipe data XML di Microsoft SQL Server?
Kapan saya harus menggunakan tipe data XML di Microsoft SQL Server?
Jawaban:
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!
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 :)
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:
Semua yang mengatakan, 99% dari waktu, saya sama sekali tidak perlu untuk bidang XML saat merancang skema.
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.
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.
Ini adalah skenario yang langsung terlintas di pikiran ketika mempertimbangkan kondisi apa yang perlu ada untuk mengizinkan bidang Xml di Sql Server:
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.