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
- One more Nested Intervals vs. Adjacency List comparison:en iyi karşılaştırmaBitişiklik Listesi, Hayata Yol, iç İçe geçmiş Set ve iç İçe geçmiş bir Aralık buldum.
- *3)*: Bu örnek, bileşimleri ve kullanım iyi açıklamalar ile slaytlar
- Representing hierarchies in MySQL: iç İçe çok iyi bir bakış özellikle Ayarlayın
- Hierarchical data in RDBMSs: gördüm bağlantıları ve iyi organize edilmiş en kapsamlı, ama açıklama da yok
Seçenekler
Genel Özellikler: farkındayım olanlar
- 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.
- 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.
- 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ı.
- 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.
- 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
- 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
- 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
- Hayata Yol için ltree datatype
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.
- Troels Comprehensive list of references Arvin.
- 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
- Çeşitli ağaç inceleme nested intervals vurgu ile kodlamalar.
Bunu Paylaş:
Nasıl bazı HTML etiketleri için rasgel...
JVM uzaktan hata ayıklama işlemi için ...
En iyi MySQL veri para değerleri depol...
Dosya sistemi farklı olarak bir verita...
Ek veri seçenekleri jQuery kullanarak ...