SORU
29 EKİM 2010, Cuma


İlişkisel bir Veritabanında Hiyerarşik Veri Depolamak için Seçenekleri nelerdir?

İyi Özetler

Sizin de genel olarak hızlı okuma zamanı (örneğin set iç içe) arasında bir karar verme ya da fast times (bitişiklik listesi) yazmak. Genelde en aşağıda seçenekler bir arada ihtiyaçlarınıza uygun olur. Aşağıdaki derinlik okuma: bazı sağlar

Seçenekler

Genel Özellikler: farkındayım olanlar

  1. Adjacency List:
    • Sütunları: ID, ParentID
    • Uygulamak kolay.
    • Ucuz düğüm hareketleri, ekler ve siler.
    • Seviye (hesaplanan bir sütun olarak saklayabilirsiniz), ataları ve torunları (Köprü Tablo sütun düzeyi ile birlikte çözebilir) bulmak için pahalı bir yol (Soy Sütun çözebilir).
    • Traverse onları destekleyen bu veritabanları Common Table Expressions kullanın.
  2. Nested Set (Bir.k.Kızıl Ağaç Geçişi Değiştirilmiş)
    • Joe tarafından popüler çok sayıda makalesi ve kitabı Celko Trees and Hierarchies in SQL for Smarties
    • Sütun: Sol, Sağ
    • Daha seviyeli, soy, soyun
    • Liste Bitişiklik göre hareket eder, ekler, daha pahalı siler.
    • Belirli bir sıralama düzeni (örneğin oluşturulan) gerektirir. Çok farklı bir sırayla tüm torunları sıralama ek çalışma gerektirir.
  3. Nested Intervals
    • İç İçe geçmiş kombinasyonunu Ayarlar ve sol/sağ sütun tamsayı yerine ondalık kayan nokta ve yol bilgileri kodlamak Yol Oluşturdum. Bu fikir sonraki gelişimi iç içe aralıklar matrix encoding yol açtı.
  4. Bridge Table (bir.k.bir. Closure Table: Bu yaklaşım korumak için Tetikleyicileri kullanma hakkında bazı iyi fikirler)
    • Sütunlar: ata, soyundan
    • Ayrı tablodan duruyor açıklar.
    • Birden fazla hiyerarşi içinde bazı düğümleri içerebilir.
    • Ucuz ataları ve torunları da değil hangi sırayla)
    • Tam bir hiyerarşi bilgisi başka bir seçenek ile kombine gerekir.
  5. Flat Table
    • Her kayıt için Seviye ve Rütbe (örneğin, sipariş) sütun ekler Bitişiklik Listenin bir değişiklik.
    • Pahalı taşımak ve silmek
    • Ucuz ataları ve torunları
    • İyi Kullanın: dişli tartışma - forum / blog yorum
  6. Lineage Column (bir.k.bir. Materialized Path Yol Numaralandırma)
    • Sütun: soy (örneğin, /üst/alt/Torun/etc...)
    • Ne kadar derin bir hiyerarşi olabilir sınırlamak.
    • Torunları daha (LEFT(lineage, #) = '/enumerated/path' gibi)
    • Zor (özel sorgular veritabanı) soy
  7. Multiple lineage columns
    • Sütunlar: her soy düzeyi, tüm ailelere köküne kadar eder Aşağı öğeleri seviyesinden seviyeleri NULL olarak ayarlanır
    • Ne kadar derin bir hiyerarşi olabilir sınırlamak
    • Ucuz ataları, seviye torunları
    • Daha eklemek, silmek, yaprakların hareket
    • Pahalı eklemek, silmek, iç düğümleri hareket

Veritabanı Özel Notlar

MySQL

Oracle

  • Traverse Bitişiklik Listeleri için CONNECT BY kullanın

PostgreSQL

SQL Server

  • General summary
  • 2008 sunar HierarchyId veri türü Sütun Soy yaklaşımla Yardım ve temsil derinliği genişletmek için görünür.

CEVAP
29 EKİM 2010, Cuma


Bu hala bile bütün büyük satıcılar 3 WITH yan Özyinelemeli başlattıktan sonra ilginç bir soru. Farklı okuyucular farklı cevaplar razı olacağını öneririm.

  1. Troels Comprehensive list of references Arvin.
  2. Rekabet olmaması için, Joe tarafından tanıtım kitabı "Keyfe için SQL Ağaçları ve Hiyerarşileri" gerçekten de bir klasik olarak kabul edilebilir. Celko
  3. Çeşitli ağaç inceleme nested intervals vurgu ile kodlamalar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • Karan Thakur

    Karan Thakur

    23 HAZİRAN 2010