İlişkisel veritabanlarındaki ağaç benzeri verileri düzgün ve verimli bir şekilde temsil edecek bir model nasıl yapılandırılır?


13

SQL sorusunu kullanarak ilişkisel bir veritabanında ağaç benzeri verileri taramaya dayalı olarak , fiziksel sonuçları göz önünde bulundurarak ilişkisel veritabanlarındaki ağaç benzeri verileri tanımlamak için düzenli olarak nasıl kullanıldığını bilmek isterim?

RDBMS normal SQL ANSI veya ortak kullanılabilir özellikler dışında işlemek için özel özelliklere sahip olmadığını varsayalım.

Şüphem her zaman MySQL ve PostgreSQL ve sonunda SQLite ile ilgileniyorum.

Yanıtlar:


8

İkili ağaç gibi bir şey yapacağına inanıyorum. Aynı tablonun benzersiz kimliğine bağlı olan, biri sol için, biri sağ çocuk için ve diğeri ebeveyn için bağlı üç anahtar içerir.

ie- (çok fazla sahte kod)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

Çift bağlantılı bir öğe için göz önünde bulundurulması gereken nokta, bu şema altında ağaç konumundaki herhangi bir değişikliğin bir yerine en az 3 güncellemeyle sonuçlanmasıdır. Belirttiğiniz gibi, bu ileri / geri ikili bir ağacın talep edilen şey olduğu büyük bir varsayımdır.
REW

çok doğru, deneyimlerime göre, iki kez bağlı bir listenin güncelleme vergisini tek ağaçlı bir listeye tercih ediyorum, çünkü genellikle bir ağacı yukarı kaydırmak zorunda kalıyorum. ancak birçok durumda bu gerekli olmayacaktır
Patrick

Kesinlikle altta yatan modele bağlıdır. Doğru modelse Patrick'in verdiği cevabın yeterli olduğunu düşünüyorum.
jcolebrand

6

Her düğüm gerçekten aynı veri varlığıysa, paradigma yine de varlık başına bir tablo ve her düğümün yalnızca bir kez bağlandığı ağaç geçişi için bir bağlantı sütunu anlamına gelir.

Ağaçtaki birden çok noktaya bağlanan varlıklar için ayrı bir bağlantı tablosu veya birden çok farklı değer sütunu kullanılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.