referensi metode jenis data hierarki

Berlaku untuk:SQL Server Azure SQL DatabaseAzure SQL Managed Instance

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

Nilai tipe data hierarki mewakili posisi dalam hierarki pohon. Nilai untuk hierarki 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 fanout rata-rata 6 tingkat membutuhkan waktu sekitar 38 bit. Ini dibulatkan hingga 40 bit, atau 5 byte, untuk penyimpanan.
  • Perbandingan dalam urutan yang mengutamakan kedalaman
    Mengingat dua nilai hierarkida dan b, a<b berarti datang sebelum b di traversal pohon yang mengutamakan kedalaman. Indeks pada jenis data hierarkid berada dalam urutan mengutamakan kedalaman, dan simpul yang dekat satu sama lain 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 mungkin 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 disisipkan 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 hierarkiid dibatasi hingga 892 byte. Akibatnya, simpul yang memiliki terlalu banyak tingkat dalam representasinya agar pas dengan 892 byte tidak dapat diwakili oleh jenis hierarki.

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 direpresentasikan sebagai urutan label simpul 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-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 panjang masing-masing 1, 2, 2, 3, dan 3:

  • /

  • /1/

  • /0.3.-7/

  • /1/3/

  • /0.1/0.2/

Simpul dapat disisipkan di lokasi mana pun. Simpul yang 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 hierarki melalui SOAP, pertama-tama transmisikan sebagai string.

Memutakhirkan database

Saat database ditingkatkan ke versi SQL Server yang lebih baru, rakitan baru dan jenis data hierarkisid akan diinstal secara otomatis. Aturan peningkatan advisor 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 berkonflik, peningkatan database akan secara otomatis mengganti nama rakitan tersebut dan menempatkan database ke mode tersangka.

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

Menggunakan kolom hierarki dalam tabel yang direplikasi

Kolom jenis hierarki 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 hierarki dengan satu replikasi arah bergantung pada versi SQL Server Pelanggan berjalan.

  • Penerbit SQL Server dapat mereplikasi kolom hierarkisid ke Pelanggan SQL Server dari 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 hierarki. 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 jenis data yang kompatibel.

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

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 hierarki 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 ketika 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 hierarkid 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 tanpa sumber. Baris induk dari baris yang disisipkan mungkin telah dihapus di Publisher. Ini menghasilkan konflik yang tidak terdeteksi ketika baris dari Pelanggan disisipkan di Penerbit.
  • 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 hierarkisid pada Publisher.
  • Pemfilteran baris didukung selama filter tidak menyertakan kolom hierarki.

Lihat juga

Data Hierarkis (SQL Server)
Referensi Metode Tipe Data hierarki