Hiyerarşik veri depolamak için yazılım

2 Cevap php

Ben verimli hiyerarşik veri depolamak için [ücretsiz] sunucu yazılımı arıyorum. Benim anahtar sorun nesnelerin bir nesne veya grup hemen hemen her zaman 2 "anne" ve bir tane var ya da her iki ebeveynin diğer ebeveyn ile farklı bağlantıları olabilir ve bu torunları ortak ebeveynin diğer soyundan ayrı kalmalıdır olmasıdır.

Örnek:

A and B
    C
    D
    E and F
        G
        H
    E and I
        J
        K
L and M
    ...

Ben yakaladım muhtemelen şiddetle PHP ile bu kullanmayı tercih ediyorum, ama bu herhangi bir son tarih olmadan kişisel bir proje olduğu gibi, yeni bir dil öğrenmeye açık olduğumu olacak sanırım. (Ben bir Linux sunucu kullanıyorum, bunu değiştirmek için istekli değilim)

Edit: To clarify my example - C, D and E are all direct descendants of both A and B, F and I are descendants of something else, possibly the same thing, possibly not, G and K are both direct descendants of both E and F, etc.

2 Cevap

Ben bu aradığınız tam olarak ne olup olmadığından emin değilim, ama Graphviz dot / grafik ilişkilerini modellemek için kullanabilirsiniz. . Burada nokta dosyasının güncellenen içeriği daha fazla açıklama gibi değil:

digraph G {
    compound = true // allow edges between clusters
    subgraph cluster_ab {
        rank = same;
        A -> B -> A
    }
    A -> C [ltail=cluster_ab]
    A -> D [ltail=cluster_ab]
    A -> E [ltail=cluster_ab]
    subgraph cluster_ef {
        rank = same;
        E -> F -> E
    }
    E -> G [ltail=cluster_ef]
    E -> H [ltail=cluster_ef]

    subgraph cluster_ei {
        E -> I -> E
    }
    I -> J [ltail=cluster_ei]
    I -> K [ltail=cluster_ei]
}

/> output" sample nokta</p>

<p>Eğer çakışan kümeleri (E-> I ve E-> F) oluşturamıyor çünkü bu, biraz farklı. Aksi takdirde orada bir uyarı oldu ve ben de J, K I'den bağlantı emin yapmak zorunda - ama E ve ben kardeşler olduğu korkunç belirgin olmasa da, daha sen açıklık ettik yol gibi düşünüyorum biraz çirkin görünüyordu.</p>

<p>Ben yaptım <a href=plenty of libraries that interface with Graphviz/dot dinamik grafikler bu tür oluşturmasına izin ziyade, elle olacağını vardır. Zaten yönettiği grafikleri almak / saklamak için bir kütüphane var ise o zaman, hiyerarşik veri depolama hemen hemen oradayız. Olarak senin soru belirtildiği gibi, efficient olsun ... tabii, depolamak ne kadar veri bağlıdır.


As @Kim points out in the comments, you can get a quite simplified graph by treating siblings as pairs, rather than individual nodes:

digraph G {
    "A,B" -> C
    "A,B" -> D
    "A,B" -> E
    "E,F" -> G
    "E,F" -> H

    "E,I" -> J
    "E,I" -> K
}

Örtüşme (Tekrar E) ortaya çıktığında bu ilişkiler kardeş hakkında biraz belirsiz kalsa da, ben tamamen gözden kaçan bir açık ve zarif bir çözüm bulunuyor.

simpler graph

Ben kendi php sınıfları yazmak daha kolay olmalı, wich çok daha uygun ihtiyaçlarınız için olacağını düşünüyorum. Böyle belki bir şey (pseudocode)

Class Item  
  [List of Item] Parents 
  [List of Item] Children

The challenge is to write the methods to manage /build up the complete structure. Persisting also the level nbr should help a lot in your case. You already have related questions in stackoverflow about saving hierarchical structures into a database.