Bagikan melalui


referensi metode jenis data hierarki

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Jenis data hierarki adalah panjang variabel, jenis data sistem. Gunakan hierarkiid untuk mewakili posisi dalam hierarki. Kolom jenis hierarkiid tidak secara otomatis mewakili pohon. Terserah aplikasi untuk menghasilkan dan menetapkan nilai hierarkiid sedih sehingga hubungan yang diinginkan antar baris tercermin dalam nilai.

Nilai jenis data hierarkis mewakili posisi dalam hierarki pohon. Nilai untuk hierarkiid memiliki properti berikut:

  • Sangat ringkas
    Jumlah rata-rata bit yang diperlukan untuk mewakili simpul di pohon dengan n simpul tergantung pada rata-rata fanout (jumlah rata-rata anak dari sebuah simpul). Untuk fanout kecil (0-7), ukurannya sekitar 6*logAn bit, di mana A adalah fanout rata-rata. Simpul dalam hierarki organisasi 100.000 orang dengan kipas rata-rata 6 tingkat membutuhkan sekitar 38 bit. Ini dibulatkan hingga 40 bit, atau 5 byte, untuk penyimpanan.
  • Perbandingan dalam urutan kedalaman pertama
    Mengingat dua nilai hierarkis a dan b, a<b berarti datang sebelum b dalam traversal pohon yang mengutamakan kedalaman. Indeks pada jenis data hierarkis berada dalam urutan yang mengutamakan kedalaman, dan simpul yang saling berdekatan dalam traversal yang mengutamakan kedalaman disimpan di dekat satu sama lain. Misalnya, anak-anak rekaman disimpan berdekatan dengan rekaman tersebut. Untuk informasi selengkapnya, lihat Data Hierarkis (SQL Server).
  • Dukungan untuk penyisipan dan penghapusan arbitrer
    Dengan menggunakan metode GetDescendant , selalu dimungkinkan untuk menghasilkan saudara kandung di sebelah kanan simpul tertentu, di sebelah kiri simpul tertentu, atau di antara dua saudara kandung. Properti perbandingan dipertahankan ketika jumlah simpul arbitrer dimasukkan atau dihapus dari hierarki. Sebagian besar penyisipan dan penghapusan mempertahankan properti kekompakan. Namun, penyisipan antara dua simpul akan menghasilkan nilai hierarkiid dengan representasi yang sedikit kurang ringkas.
  • Pengodean yang digunakan dalam jenis hierarkis dibatasi hingga 892 byte. Akibatnya, simpul yang memiliki terlalu banyak tingkat dalam representasinya agar pas dengan 892 byte tidak dapat diwakili oleh jenis hierarkiid .

Jenis hierarki tersedia untuk klien CLR sebagai jenis data SqlHierarchyId .

Keterangan

Jenis hierarkiid secara logis mengodekan informasi tentang satu simpul dalam pohon hierarki dengan mengodekan jalur dari akar pohon ke simpul. Jalur seperti itu secara logis diwakili sebagai urutan label node dari semua anak yang dikunjungi setelah akar. Garis miring memulai representasi, dan jalur yang hanya mengunjungi akar diwakili oleh satu garis miring. Untuk tingkat di bawah akar, setiap label dikodekan sebagai urutan bilangan bulat yang dipisahkan oleh titik. Perbandingan antara anak dilakukan dengan membandingkan urutan bilangan bulat yang dipisahkan oleh titik-titik dalam urutan kamus. Setiap level diikuti dengan garis miring. Oleh karena itu garis miring memisahkan orang tua dari anak-anak mereka. Misalnya, berikut ini adalah jalur hierarkiid yang valid dengan masing-masing tingkat 1, 2, 2, 3, dan 3:

  • /

  • /1/

  • /0.3.-7/

  • /1/3/

  • /0.1/0.2/

Simpul dapat disisipkan di lokasi mana pun. Simpul dimasukkan setelah /1/2/ tetapi sebelum /1/3/ dapat direpresentasikan sebagai /1/2.5/. Simpul yang disisipkan sebelum 0 memiliki representasi logis sebagai angka negatif. Misalnya, simpul yang datang sebelum /1/1/ dapat direpresentasikan sebagai /1/-1/. Simpul tidak boleh memiliki nol di depannya. Misalnya, /1/1.1/ valid, tetapi /1/1.01/ tidak valid. Untuk mencegah kesalahan, sisipkan simpul dengan menggunakan metode GetDescendant .

Konversi tipe data

Jenis data hierarki dapat dikonversi ke jenis data lain sebagai berikut:

  • Gunakan metode ToString() untuk mengonversi nilai hierarkiid ke representasi logis sebagai jenis data nvarchar(4000).
  • Gunakan Baca () dan Tulis () untuk mengonversi hierarkiid ke varbinary.
  • Untuk mengirimkan parameter hierarkiid melalui SOAP, pertama-tama transmisikan sebagai string.

Memutakhirkan database

Ketika database ditingkatkan ke versi SQL Server yang lebih baru, rakitan baru dan jenis data hierarkis akan diinstal secara otomatis. Aturan penasihat peningkatan mendeteksi jenis pengguna atau rakitan apa pun dengan nama yang bertentangan. Penasihat peningkatan akan menyarankan penggantian nama rakitan yang bertentangan, dan mengganti nama jenis yang bertentangan, atau menggunakan nama dua bagian dalam kode untuk merujuk ke jenis pengguna yang sudah ada sebelumnya.

Jika peningkatan database mendeteksi rakitan pengguna dengan nama yang bertentangan, itu akan secara otomatis mengganti nama rakitan tersebut dan memasukkan database ke dalam mode tersangka.

Jika jenis pengguna dengan nama yang bertentangan ada selama peningkatan, tidak ada langkah khusus yang diambil. Setelah peningkatan, jenis pengguna lama, dan jenis sistem baru, akan ada. Jenis pengguna hanya akan tersedia melalui nama dua bagian.

Menggunakan kolom hierarkiid dalam tabel yang direplikasi

Kolom jenis hierarkiid dapat digunakan pada tabel yang direplikasi. Persyaratan untuk aplikasi Anda bergantung pada apakah replikasi satu arah atau dua arah, dan pada versi SQL Server yang digunakan.

Replikasi satu arah

Replikasi satu arah mencakup replikasi rekam jepret, replikasi transaksional, dan replikasi penggabungan di mana perubahan tidak dilakukan pada Pelanggan. Cara kerja kolom hierarkiid dengan replikasi satu arah bergantung pada versi SQL Server yang dijalankan Pelanggan.

  • Penerbit SQL Server dapat mereplikasi kolom hierarkisid ke Pelanggan SQL Server dengan versi yang sama tanpa pertimbangan khusus.
  • Penerbit SQL Server harus mengonversi kolom hierarkiid untuk mereplikasinya ke Pelanggan yang menjalankan SQL Server Compact atau versi SQL Server yang lebih lama. SQL Server Compact dan versi SQL Server yang lebih lama tidak mendukung kolom hierarkisid . Jika Anda menggunakan salah satu versi ini, Anda masih dapat mereplikasi data ke Pelanggan. Untuk melakukan ini, Anda harus mengatur opsi skema atau tingkat kompatibilitas publikasi (untuk replikasi penggabungan) sehingga kolom dapat dikonversi ke tipe data yang kompatibel.

Pemfilteran kolom didukung dalam kedua skenario ini. Ini termasuk memfilter kolom hierarkiid . Pemfilteran baris didukung selama filter tidak menyertakan kolom hierarkiid .

Replikasi dua arah

Replikasi dua arah mencakup replikasi transaksional dengan memperbarui langganan, replikasi transaksional peer-to-peer, dan menggabungkan replikasi di mana perubahan dilakukan pada Pelanggan. Replikasi memungkinkan Anda mengonfigurasi tabel dengan kolom hierarkiid untuk replikasi dua arah. Perhatikan persyaratan dan pertimbangan berikut.

  • Penerbit dan semua Pelanggan harus menjalankan versi SQL Server 2016 (13.x) yang sama atau yang lebih baru.
  • Replikasi mereplikasi data sebagai byte dan tidak melakukan validasi apa pun untuk memastikan integritas hierarki.
  • Hierarki perubahan yang dibuat di sumber (Pelanggan atau Penerbit) tidak dipertahankan saat mereka mereplikasi ke tujuan.
  • Nilai hash untuk kolom hierarkis khusus untuk database tempat kolom tersebut dihasilkan. Oleh karena itu, nilai yang sama dapat dihasilkan pada Penerbit dan Pelanggan, tetapi dapat diterapkan ke baris yang berbeda. Replikasi tidak memeriksa kondisi ini, dan tidak ada cara bawaan untuk mempartisi nilai kolom hierarkiid karena ada untuk kolom IDENTITY. Aplikasi harus menggunakan batasan atau mekanisme lain untuk menghindari konflik yang tidak terdeteksi tersebut.
  • Ada kemungkinan bahwa baris yang dimasukkan pada Pelanggan akan menjadi yatim piatu. Baris induk baris yang disisipkan mungkin telah dihapus di Publisher. Ini menghasilkan konflik yang tidak terdeteksi ketika baris dari Pelanggan disisipkan di Publisher.
  • Filter kolom tidak dapat memfilter kolom hierarkiid yang tidak dapat diubah ke null: sisipan dari Pelanggan akan gagal karena tidak ada nilai default untuk kolom hierarkiid pada Publisher.
  • Pemfilteran baris didukung selama filter tidak menyertakan kolom hierarkiid .

Lihat juga

Data Hierarkis (SQL Server)
Referensi Metode Tipe Data hierarkiid