Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wie Netzplan in DB abbilden? (https://www.delphipraxis.net/173351-wie-netzplan-db-abbilden.html)

Jumpy 19. Feb 2013 08:52

Datenbank: Egal • Version: -- • Zugriff über: --

Wie Netzplan in DB abbilden?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

zur Unterstützung der Steuerung eines komplexen Workflows (Releasewechsel) möchte ich ein Hilfstool erstellen. Am RW sind mehrere Abteilungen quer über die Firma verteilt beteiligt. Koordiniert wird das mit einer Papier-Checkliste und viel Telefonieren wer was wann schon gemacht hat.

Da dieser Prozess sowas wie ein kleines, an einem Tag stattfindendes Projekt darstellt ist mit aus der Schule als gute Analogie der Netzplan (s. Bild) eingefallen. Hier ist ersichtlich in welcher Reihenfolge einzelne Schritte erfolgen müssen. Abhängigkeiten sind ersichtlich.

Im Prinzip möchte ich also nachher sowas wie einen Netzplan in meiner GUI sehen, wo dann angeklickt werden kann, was erledigt ist, dadurch wird erst etwas ggf. davon Abhängiges freigeschaltet usw.

(Gedacht ist das nacher als Server-Client-Anwendung, wobei der Server ggf. der Client des Projektleiters ist, der alles koordiniert, aber auch jeder andere kann über seinen Client sehen, was der aktuelle Stand ist und kann auch, die Dinge, die er erledigt hat freischalten).

Zu Anfang fehlt mir aber die Idee, wie man das in einer DB abbildet. Es gibt das ganze als eine Art Tabellendarstellung (s. Bild) aber das ist mMn nich DB-geignet (keine Normalisierung usw.).
Hat jemand in der Richtung mal was gemacht oder eine Idee?

Aphton 19. Feb 2013 09:05

AW: Wie Netzplan in DB abbilden?
 
Warum keine Normalisierung?
Normalisiere alles wie gewohnt, passt halt die Darstellung dann dementsprechend an.
Mein erster Gedanke wäre das hier:

Vorgang {[ID, Bezeichnung]}
Vorgänger {[ID, vorID]}
Nachfolger {[ID, nachID]}

Die Beziehung zwischen Vorgäng und Vorgänger/Nachfolger ist 1:n.
Du kannst bei der Darstellung der Vörgänge die Vorgänger und Nachfolger ermitteln und diese auch genauso wie in dieser Tabelle
anzeigen.

Edit: Ich hab mir nur das erste Bild angesehen und direkt daraufhin geantwortet.
Falls es nichts zur Sache tut, dann sry xD

jfheins 19. Feb 2013 10:19

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von Aphton (Beitrag 1204263)
Die Beziehung zwischen Vorgäng und Vorgänger/Nachfolger ist 1:n.
Du kannst bei der Darstellung der Vörgänge die Vorgänger und Nachfolger ermitteln und diese auch genauso wie in dieser Tabelle
anzeigen.

Nö, eigentlich nicht. Hättest du dir das erste Bild mal genauer angeschaut, wärst du auf eine m:n Beziehung gekommen. Schließlich kann jeder Vorgang mehrere Vorgänge als "Vorgänger" haben und mehrere Vorgänge als "Nachfolger"

Ich würde da jetzt so ein Datenbankdesign machen:

Tabelle "Vorgang"
- id int autoinc primary_key
- duration int (Zeitaufwand in Minuten oder sowas)
- name varchar(255) (Name des Vorgangs, also z.B. "Material bestellen")

Tabelle "VorgangVorgang"
- id int (optional)
- predID int
- succID int

Die Namen könnte man vielleicht noch überdenken :stupid:

Aphton 19. Feb 2013 10:25

AW: Wie Netzplan in DB abbilden?
 
Sry, stimmt. Ich habe nur aus der Perspektive von "Vorgang" gedacht.. Also zu einem Vorgang kann es mehrere Vorgänger/Nachfolger geben..
Danke fürs Korrigieren

EarlyBird 19. Feb 2013 10:28

AW: Wie Netzplan in DB abbilden?
 
Bei DevExpress findest Du eine Komponente "ExpressOrgChart™ Suite"
Die ist DB gebunden.
http://www.devexpress.com/Products/VCL/ExOrgChart/
In der Trialversion gibt es auch eine Demo dazu.
Vielleicht hilft Dir das als Ansatz ja weiter

Furtbichler 19. Feb 2013 13:31

AW: Wie Netzplan in DB abbilden?
 
Der Renderer ist aber mistig, oder?

QuickAndDirty 19. Feb 2013 14:18

AW: Wie Netzplan in DB abbilden?
 
Einen Graph aus Knoten und gerichteten Kanten abbilden.

nodes{ID,Bezeichnung,Dauer, Farbe...}
edges{ID(der form halber),StartNodeID, EndNodeID, Bezeichnung, LinienArt, Farbe,...}

mehr braucht es nicht
Eine liste von Knoten und eine Adjazenzliste.

Furtbichler 19. Feb 2013 18:42

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1204316)
mehr braucht es nicht

Nun ja. Vielleicht einen Layouter und einen Renderer. Der Layouter sollte die Knoten so plazieren, das sie gleichmäßig angeordnet sind und sich die Verbindungen möglichst nicht überschneiden.

Und der Renderer malt.

Also ein klitzekleinwenig mehr braucht es schon. Und -wie ich finde- sind das die größten Humpen, wobei der Renderer auch keine Hürde ist.

Jumpy 20. Feb 2013 07:40

AW: Wie Netzplan in DB abbilden?
 
Hallo und guten morgen. Und erstmal danke.

Bevor das ausartet, mir ging es primär um die Datenbankstruktur und da haben apthon und jfheins ja gute Vorschläge gemacht, die ich als Basis nehmen werde.
Ich werde den Vorgängen zusätzlich einen Rang/Ebene/Kategorie o.ä. spendieren, um zu wissen, welche Vorgänge parallel (auf gleicher Höhe) gezeichnet werden sollen.

Aber mir ging es wie gesagt primär um das Speichern in der DB. Zeichnen will ich das gar nicht, vor allem nicht als Graph mit Linien und so, das könnt ich in Visio 100mal schneller. Meine momentane Idee ist, das jeder Rang ein Panel oder Frame ist in den dann die Vorgänge als Checkboxen oder Button kommen. Aber soweit bin ich mit der Planung noch nicht.

jobo 20. Feb 2013 09:23

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von Jumpy (Beitrag 1204410)
Ich werde den Vorgängen zusätzlich einen Rang/Ebene/Kategorie o.ä. spendieren, um zu wissen, welche Vorgänge parallel (auf gleicher Höhe) gezeichnet werden sollen.

Wenn Du dass machst, wäre das m.E. eine redundante Information. Ob es notwendig ist, diese Info (Rang) bequem auslesen zu können, sei dahingestellt. Es wäre dann aber notwendig, bei jedem Insert/Update zu prüfen, ob sich die Rang-Infos verschoben haben. Das kann 0-n Sätze (u.U. ganz viele) betreffen.
Also wäre zu entscheiden: Aufwändig nachführen und bequem auslesen oder aktuell abfragen/evaluieren.

Davidlocke13 20. Feb 2013 09:36

AW: Wie Netzplan in DB abbilden?
 
Morgen,

dein Netzplan und die Tabelle sind mir doch was suspekt.
In der Tabelle gibt es keine Zeiten, die auf ein mal im Netzplan auftauchen !

Die Anfangs- und Endzeiten sind bei dir auch an einer recht komischen stelle !

Habe das Tema gerade in der Berufsschule und eigentlich sollte das doch wohl nicht schwierige sein die Tabelle in der Datenbank anzulegen !

http://www.bwl-betriebswirtschaft.de/netzplan.html

QuickAndDirty 20. Feb 2013 10:13

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von Furtbichler (Beitrag 1204387)
Zitat:

Zitat von QuickAndDirty (Beitrag 1204316)
mehr braucht es nicht

Nun ja. Vielleicht einen Layouter und einen Renderer. Der Layouter sollte die Knoten so plazieren, das sie gleichmäßig angeordnet sind und sich die Verbindungen möglichst nicht überschneiden.

Und der Renderer malt.

Also ein klitzekleinwenig mehr braucht es schon. Und -wie ich finde- sind das die größten Humpen, wobei der Renderer auch keine Hürde ist.

Mit "abbilden" war hier, "In einer DB abbilden" gemeint.
Das letzte mal habe ich Graphen über das GraphViz Framework gelayoutet und gerendert. Besonders sinnvoll sind, als SVG Grafik gerenderte Graphen,...leider ist SVG-Support nicht standardmäßig in meinem Delphi 2007 dabei...aber ne Browserkomponente ^^ . Ich habe das damals einfach in C# gemacht :)
Für einen Netzplan würde ich die DOT engine empfehlen ansonsten liegt mir FDP und Circo sehr.

Jumpy 20. Feb 2013 11:27

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1204434)
Morgen,

dein Netzplan und die Tabelle sind mir doch was suspekt.
In der Tabelle gibt es keine Zeiten, die auf ein mal im Netzplan auftauchen !

Die Anfangs- und Endzeiten sind bei dir auch an einer recht komischen stelle !

Habe das Tema gerade in der Berufsschule und eigentlich sollte das doch wohl nicht schwierige sein die Tabelle in der Datenbank anzulegen !

http://www.bwl-betriebswirtschaft.de/netzplan.html

Sorry für die Verwirrung. Bei den Bildern hab ich nur die ersten genommen, die ich bei Google-Pics gefunden habe, um zu zeigen, was ich mit Netztplan und Tabellendarstellung meinte. Die gehören nicht zusammen (hab auf die schnelle kein zusammenpassendes Pärchen davon gefunden) und vor allem hat es nichts mit den Daten zu tun, die ich letztlich speichern will.

Jumpy 20. Feb 2013 11:35

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von jobo (Beitrag 1204429)
Zitat:

Zitat von Jumpy (Beitrag 1204410)
Ich werde den Vorgängen zusätzlich einen Rang/Ebene/Kategorie o.ä. spendieren, um zu wissen, welche Vorgänge parallel (auf gleicher Höhe) gezeichnet werden sollen.

Wenn Du dass machst, wäre das m.E. eine redundante Information. Ob es notwendig ist, diese Info (Rang) bequem auslesen zu können, sei dahingestellt. Es wäre dann aber notwendig, bei jedem Insert/Update zu prüfen, ob sich die Rang-Infos verschoben haben. Das kann 0-n Sätze (u.U. ganz viele) betreffen.
Also wäre zu entscheiden: Aufwändig nachführen und bequem auslesen oder aktuell abfragen/evaluieren.

Wenn du dir oben das Bild mit dem gezeichneten Netzplan nochmal anguckst, dann will ich mit dem Rang steuern, ob (in obigem Beispiel) "Musikanlage installieren" unter "Deko kaufen" oder "Deko anbringen" platziert wird. Das ist also eine Info, die ich später für die Platzierung brauche.

Es wird nämlich keine Zeiten geben oder ähnliches, über die die Platzierung (in einem normalen Netzplan) ggf. laufen würde.

WIe gesagt, der Netztplan ist nur das was dem am nächsten kommt, was ich machen möchte und obigen Bilder waren nur als Beispiel gedacht und haben nix mit meinen späteren Daten zu tun. Nochmals sorry für die Verwirrung.

jobo 20. Feb 2013 11:58

AW: Wie Netzplan in DB abbilden?
 
Zitat:

Zitat von Jumpy (Beitrag 1204457)
Wenn du dir oben das Bild mit dem gezeichneten Netzplan nochmal anguckst, dann will ich mit dem Rang steuern, ob (in obigem Beispiel) "Musikanlage installieren" unter "Deko kaufen" oder "Deko anbringen" platziert wird. Das ist also eine Info, die ich später für die Platzierung brauche.

Es wird nämlich keine Zeiten geben oder ähnliches, über die die Platzierung (in einem normalen Netzplan) ggf. laufen würde.

Das habe ich glaube ich ungefähr richtig verstanden und es ändert das Problem db seitig nicht. Es ist klar, das für die Darstellung diese Information gebraucht werden muss. Speicherst Du sie mit im Modell, kommt es zu Widersprüchen, sobald neue Abhängigkeiten eingegeben werden oder bestehende geändert werden. Dann muss die Ranginformation (permanent) mitaktualisiert werden.
Alternativ muss sie eben- wenn nicht im Modell gespeichert- im Bedarfsfall(redndering) aus den Daten berechnet werden. Der Algorithmus wäre der gleiche, würde aber vermutlich seltener angewendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz