hierarchyid veri türü yöntemi başvurusu
hierarchyid veri türü, değişken uzunlukta bir sistem veri türüdür. Hiyerarşideki konumu göstermek için hierarchyid kullanın. hierarchyid türünde bir sütun otomatik olarak bir ağacı temsil etmez. hierarchyid değerleri, satırlar arasındaki istenen ilişki değerlere yansıtacak şekilde oluşturmak ve atamak uygulamaya bağlıdır.
hierarchyid veri türünün değeri, ağaç hiyerarşisindeki bir konumu temsil eder. hierarchyid değerleri aşağıdaki özelliklere sahiptir:
- Son derece kompakt
n düğümleri olan bir ağaçtaki bir düğümü temsil etmek için gereken ortalama bit sayısı, ortalama kesintiye (düğümün alt öğelerinin ortalama sayısı) bağlıdır. Küçük fanout'lar (0-7) için boyut yaklaşık 6*logAn bittir; burada A ortalama fanout'tır. Ortalama 6 düzeyden oluşan 100.000 kişilik bir kuruluş hiyerarşisindeki düğüm yaklaşık 38 bit alır. Bu, depolama için 40 bit veya 5 bayt'a kadar yuvarlanmış olur. - Karşılaştırma ilk sıradadır
biriki hierarchyid değeri verilipb , a değerinin ağacın derinlik öncelikli çapraz geçişinde b'den önce geldiği anlamına gelir. hierarchyid veri türlerindeki dizinler derinlemesine ilk sıradadır ve derinlik öncelikli geçişte birbirine yakın düğümler birbirine yakın bir şekilde depolanır. Örneğin, bir kaydın alt öğeleri bu kayda bitişik olarak depolanır. Daha fazla bilgi için bkz. Hiyerarşik Veriler (SQL Server).b - Rastgele ekleme ve silme desteği
GetDescendant yöntemini kullanarak, belirli bir düğümün sağındaki, belirli bir düğümün solunda veya iki eşdüzey arasında eşdüzey oluşturmak her zaman mümkündür. Hiyerarşiden rastgele sayıda düğüm eklendiğinde veya silindiğinde karşılaştırma özelliği korunur. Çoğu ekleme ve silme işlemi sıkıştırma özelliğini korur. Ancak, iki düğüm arasındaki eklemeler biraz daha az küçük bir gösterime sahip hierarchyid değerleri üretir. - hierarchyid türünde kullanılan kodlama 892 bayt ile sınırlıdır. Sonuç olarak, gösterimlerinde 892 bayta sığmayacak kadar çok düzeye sahip düğümler hierarchyid türüyle temsil edilemez.
hierarchyid türü, SqlHierarchyId veri türü olarak CLR istemcileri tarafından kullanılabilir.
Açıklamalar
hierarchyid türü, ağaç kökünden düğüme giden yolu kodlayarak bir hiyerarşi ağacındaki tek bir düğüm hakkındaki bilgileri mantıksal olarak kodlar. Böyle bir yol mantıksal olarak kök sonra ziyaret edilen tüm alt öğelerin düğüm etiketleri dizisi olarak temsil edilir. Eğik çizgi gösterimi başlatır ve yalnızca kökü ziyaret eden bir yol tek bir eğik çizgiyle temsil edilir. Kökün altındaki düzeyler için her etiket noktalarla ayrılmış bir tamsayı dizisi olarak kodlanır. Alt öğeler arasındaki karşılaştırma, sözlük sırasında noktalarla ayrılmış tamsayı dizileri karşılaştırılarak gerçekleştirilir. Her düzeyin ardından eğik çizgi eklenir. Bu nedenle eğik çizgi, ebeveynleri çocuklarından ayırır. Örneğin, sırasıyla 1, 2, 2, 3 ve 3 düzeylerinde geçerli hierarchyid yolları şunlardır:
/
/1/
/0.3.-7/
/1/3/
/0.1/0.2/
Düğümler herhangi bir konuma eklenebilir. /1/2/ sonra eklenen düğümler ancak /1/3/ önce /1/2.5/olarak gösterilebilir. 0'ın önüne eklenen düğümlerin mantıksal gösterimi negatif bir sayıdır. Örneğin, /1/1/ önce gelen bir düğüm /1/-1/olarak gösterilebilir. Düğümlerin başında sıfır olamaz. Örneğin /1/1.1/ geçerli, ancak /1/1.01/ geçerli değil. Hataları önlemek için GetDescendant yöntemini kullanarak düğüm ekleyin.
Veri türü dönüştürme
hierarchyid veri türü aşağıdaki gibi diğer veri türlerine dönüştürülebilir:
- hierarchyid değerini nvarchar(4000) veri türü olarak mantıksal gösterime dönüştürmek için ToString() yöntemini kullanın.
- hierarchyidvarbinarydönüştürmek için Okuma () ve Yazma () kullanın.
- hierarchyid parametrelerini SOAP aracılığıyla iletmek için önce bunları dize olarak yayınlar.
Veritabanlarını yükseltme
Veritabanı SQL Server'ın daha yeni bir sürümüne yükseltildiğinde, yeni derleme ve hierarchyid veri türü otomatik olarak yüklenir. Yükseltme danışmanı kuralları, çakışan adlara sahip tüm kullanıcı türlerini veya derlemeleri algılar. Yükseltme danışmanı, çakışan tüm derlemelerin yeniden adlandırılması ve çakışan herhangi bir türün yeniden adlandırılması veya bu önceden var olan kullanıcı türüne başvurmak için kodda iki parçalı adların kullanılması önerisinde bulunur.
Veritabanı yükseltmesi çakışan ada sahip bir kullanıcı derlemesi algılarsa, bu derlemeyi otomatik olarak yeniden adlandırır ve veritabanını şüpheli moduna alır.
Yükseltme sırasında adı çakışan bir kullanıcı türü varsa, özel bir adım atılır. Yükseltmeden sonra hem eski kullanıcı türü hem de yeni sistem türü mevcut olur. Kullanıcı türü yalnızca iki bölümlü adlarla kullanılabilir.
Çoğaltılan tablolarda hierarchyid sütunlarını kullanma
hierarchyid türündeki sütunlar çoğaltılan herhangi bir tabloda kullanılabilir. Uygulamanızın gereksinimleri, çoğaltmanın tek yönlü veya çift yönlü olmasına ve kullanılan SQL Server sürümlerine bağlıdır.
Tek yönlü çoğaltma
Tek yönlü çoğaltma, anlık görüntü çoğaltmayı, işlem çoğaltmasını ve abonede değişiklik yapılmayan birleştirme çoğaltmasını içerir. hierarchyid sütunlarının tek yönlü çoğaltmayla nasıl çalıştığı Abonenin çalıştırılan SQL Server sürümüne bağlıdır.
- SQL Server Publisher, hierarchyid sütunlarını özel bir husus olmadan aynı sürüme sahip bir SQL Server Abonesine çoğaltabilir.
- SQL Server Publisher'ın hierarchyid sütunlarını SQL Server Compact veya SQL Server'ın önceki bir sürümünü çalıştıran aboneye çoğaltmak için dönüştürmesi gerekir. SQL Server Compact ve önceki SQL Server sürümleri, hierarchyid sütunlarını desteklemez. Bu sürümlerden birini kullanıyorsanız verileri aboneye yine de çoğaltabilirsiniz. Bunu yapmak için, sütunun uyumlu bir veri türüne dönüştürülebilmesi için bir şema seçeneği veya yayın uyumluluk düzeyi (birleştirme çoğaltması için) ayarlamanız gerekir.
Sütun filtreleme bu senaryoların her ikisinde de desteklenir. Bu, hierarchyid sütunlarını filtrelemeyi içerir. Filtre bir hiyerarşi kimliği sütun içermediği sürece satır filtreleme desteklenir.
çift yönlü çoğaltma
çift yönlü çoğaltma abonelikleri güncelleştirme, eşler arası işlem çoğaltması ve abonede değişikliklerin yapıldığı birleştirme çoğaltması ile işlem çoğaltmasını içerir. Çoğaltma, çift yönlü çoğaltma için hierarchyid sütunları olan bir tablo yapılandırmanızı sağlar. Aşağıdaki gereksinimlere ve dikkat edilmesi gerekenlere dikkat edin.
- Publisher ve tüm Aboneler AYNı SQL Server 2016 (13.x) veya sonraki bir sürümünü çalıştırıyor olmalıdır.
- Çoğaltma, verileri bayt olarak çoğaltır ve hiyerarşinin bütünlüğünü sağlamak için herhangi bir doğrulama gerçekleştirmez.
- Kaynakta (Abone veya Yayımcı) yapılan değişikliklerin hiyerarşisi hedefe çoğaltıldıklarında korunmaz.
- hierarchyid sütunlarının karma değerleri, oluşturuldukları veritabanına özeldir. Bu nedenle, Yayımcı ve Abone üzerinde aynı değer oluşturulabilir, ancak farklı satırlara uygulanabilir. Çoğaltma bu koşulu denetlemez ve IDENTITY sütunları için olduğu gibi hierarchyid sütun değerlerini bölümlemenin yerleşik bir yolu yoktur. Uygulamaların bu tür algılanmayan çakışmaları önlemek için kısıtlamalar veya başka mekanizmalar kullanması gerekir.
- Aboneye eklenen satırların yalnız bırakılmış olması mümkündür. Eklenen satırın üst satırı Publisher'da silinmiş olabilir. Bu, Aboneden gelen satır Yayımcı'ya eklendiğinde algılanmayan bir çakışmaya neden olur.
- Sütun filtreleri null değer atanamayan hierarchyid sütunlarını filtreleyemez: Publisher'daki hierarchyid sütunu için varsayılan değer olmadığından Aboneden eklemeler başarısız olur.
- Filtre bir hiyerarşi kimliği sütun içermediği sürece satır filtreleme desteklenir.
Ayrıca bkz.
Hiyerarşik Veriler (SQL Server)
hierarchyid Veri Türü Yöntemi Başvurusu