Implementatie van een taakboom in SQL?

Status
Niet open voor verdere reacties.

Peet206

Nieuwe gebruiker
Lid geworden
25 feb 2008
Berichten
3
Hallo allen,
Ik ben geen SQL goeroe. Volgens mij zijn deze wel ruimschoots aanwezig in dit forum. Ik hoop dat jullie mij kunnen helpen bij een ontwerpkeuze.

In wil een takenlijst gaan bijhouden in een tabel. De taken moeten subtaken kunnen bevatten, en deze weer sub-sub-taken enz. Ik zoek nu de ideale manier om dit te ontwerpen, zodat ik met een paar goede SQL queries hetvolgende terug kan vinden:

  1. Een boom van alle taken met subtaken in de goede volgorde.
  2. Alle subtaken van een taak.
  3. De taakboom naar boven toe vanuit een sub/sub/subtaak gezien.
Verder wil ik natuurlijk makkelijk taken en taakbomen kunnen verplaatsen, op elk willekeurig taaknivo.

Alvast heel erg bedankt.
Peter
 
Dat lijkt me haalbaar met 2 tabellen:
taak
id | titel | startdatum | einddatum | omschrijving
subtaken
parentID | subID
  1. alle taken: alle taken zonder parent ophalen, dan voor die resultaten nieuwe queries uitvoeren die de subtaken opvragen, tot er geen subtaken meer gevonden zijn
    alle toplevel taken:
    Code:
    SELECT * FROM taak
    WHERE id NOT IN ( SELECT subID FROM subtaken )
    ORDER BY startdatum|einddatum ASC|DESC
  2. subtaken: alle subtaken van een bepaalde parent opvragen. volgende query vraagt 1 level lager op, dan voor elk van deze taken de query opnieuw uitvoeren:
    Code:
    SELECT * FROM taak
    WHERE id IN (SELECT subID FROM subtaken
            WHERE parentID = 'ID_of_the_parent')
  3. ancestors: de bovenliggende taak van de huidige opvragen, en dit herhalen tot er geen resultaat meer is:
    Code:
    SELECT * FROM taak
    WHERE id IN (SELECT parentID FROM subtaken
            WHERE subID = 'ID_of_the_child')

--Johan
 
Alvast bedankt, deze begrijp ik.

Ik wil echter de nesting van de taken niet beperken tot 1 diep. Dus dit moet mogelijk zijn:

Code:
AAAA
    BBBB
    CCCC
         DDDD
             dddd
         EEEE
    FFFF
        ffff
        fff
GGGG
    HHHH
enz
.

Ik dacht zelf dus aan 1 tabel, maar weet niet goed raad met het zoeken daarin.

Peter
 
Laatst bewerkt:
Dat kan perfect met de structuur die ik je gegeven heb:

de tabel taak (id | titel)
Code:
1 | AAAA
2 | BBBB
3 | CCCC
4 | DDDD
5 | EEEE
6 | FFFF
7 | GGGG
8 | HHHH
9 | dddd
10 | ffff
11 | fff

de tabel subtaken (parentID | childID)
Code:
1 | 2
1 | 3
1 | 6
7 | 8
3 | 4
3 | 5
6 | 10
6 | 11
4 | 9
 
OK Johan, het muntje valt nu.

Ik dacht dat ik het begreep. Het voorbeeld maakte het duidelijk. Ik ga hier vanavond mee aan de gang (hobbyproject).

Bedankt,
Peter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan