Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
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 sedid 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 fanout rata-rata (jumlah rata-rata anak dari simpul). Untuk fanout kecil (0-7), ukurannya sekitar 6 * logA n bit, di mana A adalah fanout rata-rata. Simpul dalam hierarki organisasi 100.000 orang dengan kipas rata-rata enam tingkat membutuhkan sekitar 38 bit. Ini dibulatkan hingga 40 bit, atau 5 byte, untuk penyimpanan.
Perbandingan dalam urutan pertama mendalam: Mengingat dua nilai
adanb,a<bberarti 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 mana pun. 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 menghasilkan nilai hierarkiid dengan representasi yang sedikit kurang ringkas.
Pengodean dibatasi hingga 892 byte: Jadi, simpul yang memiliki terlalu banyak tingkat dalam representasinya agar pas dengan 892 byte tidak dapat diwakili oleh jenis hierarkis .
Jenis hierarki tersedia untuk klien runtime bahasa umum (CLR) sebagai SqlHierarchyId jenis data.
Remarks
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 disisipkan setelah /1/2/ tetapi sebelumnya /1/3/ dapat direpresentasikan sebagai /1/2.5/. Simpul yang disisipkan sebelum 0 memiliki representasi logis sebagai angka negatif. Misalnya, simpul yang datang sebelumnya /1/1/ dapat direpresentasikan sebagai /1/-1/. Simpul tidak dapat 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 (Mesin Database) dengan menggunakan CSharp dan Tulis untuk mengonversi hierarkis ke varbinary.
Untuk mengirimkan parameter hierarkiid melalui SOAP, pertama-tama transmisikan sebagai string.
Memutakhirkan database
Saat database ditingkatkan ke versi SQL Server yang lebih baru, rakitan baru dan jenis data hierarkis secara otomatis diinstal. Aturan penasihat peningkatan mendeteksi jenis pengguna atau rakitan apa pun dengan nama yang bertentangan. Penasihat peningkatan 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, peningkatan tersebut secara otomatis mengganti nama perakitan 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 ada. Jenis pengguna hanya tersedia melalui nama dua bagian.
Menggunakan kolom hierarki 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 tempat 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 hierarkiid . 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 yang sama, pada SQL Server 2016 (13.x) atau versi 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 untuk kolom hierarkiid dapat memiliki representasi biner yang identik di semua database. Konflik dapat terjadi dalam replikasi dua arah ketika logika aplikasi secara independen menghasilkan hierarkiid yang sama untuk entitas yang berbeda. 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
IDENTITYkolom. Aplikasi harus menggunakan batasan atau mekanisme lain untuk menghindari konflik yang tidak terdeteksi tersebut.Ada kemungkinan bahwa baris yang disisipkan pada Pelanggan dapat tanpa induk. Baris induk baris yang disisipkan mungkin 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. Penyisipan dari Pelanggan gagal karena tidak ada nilai default untuk kolom hierarkiid pada Publisher.
Pemfilteran baris didukung selama filter tidak menyertakan kolom hierarkiid .