[GORM] Löschen gesamter CMP-Bäume?

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

[GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 11.01.2012, 17:52:23

Moin moin!

Der GORM ist ja mein Lieblings-Werkzeug des APF udn ich finde es unheimlich praktisch, was man damit alles machen kann. Leider musste ich jetzt erst wieder feststellen, dass es auch ein "Problem" gibt, was das Löschen von übergeordneten COMPOSITIONS angeht. Bei ASSOCIATIONS werden die Verbidnungen ja automatisch gelöscht, da muss man sich nicht drum bemühen. Wenn ich aber definitiv ein COMPOSITION-Objekt löschen möchte, muss ich explizit vorher alle Kinder-Elemente löschen, bevor ich die eigentliche Löschen durchführen kann. Dass das Sinnvoll sein kann steht außer Frage, aber wäre es vielleicht möglich einen optionalen Parameter mit einzubauen, der es ermöglicht das Löschen zu erzwingen und dann automatisch alle Kind-Elemente mit zu löschen? Das würde manchmal einiges an Schleifen im Code sparen!?

LG
Lutz
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von Megger » 11.01.2012, 18:27:47

Find ich sinnvoll! Also je nach "Schalter" werden dann entweder die CMP Beziehungen gecheckt und bei vorhandensein eine Exception geworfen oder aber die entsprechenden Objekte werden direkt mitgelöscht!

Aber wie sieht das bei mehreren Beziehungen aus (wobei ja eigentlich immer nur eine CMP Beziehung vorhanden sein sollte)

Code: Alles auswählen

                  Objekt A
                 /         \
         Objekt B           Objekt C
         /        \
  Objekt D          Objekt E
Wenn die Beziehungen alle CMP Beziehungen sind und ich Objekt E lösche, dann wären alle Objekte weg, weil der GORM eigentlich nicht unterscheiden kann, das Eltern- und was Kindelemente sind, oder?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von dr.e. » 11.01.2012, 19:14:51

Nur kurz, weil ich auf dem Sprung bin: der Einwand von Tobi ist auch meine Befürchtung. Ab einem gewissen Punkt kannst du automatisch nicht mehr sauber trennen, was gewünscht ist und was nicht. Bei einem größeren Graphen kann es also sein, dass du dir dadurch die komplette Applikation zerschießt. Beim UMGT würde beispielsweise durch ein Löschen einer Application die komplette Datenbank leer sein. :(
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 11.01.2012, 22:04:58

Also was ein Eltern- und was ein Kind-Element kann der GORM sehr wohl unterscheiden, sonst wäre es ja garmicht möglich überhaupt Daten aus der DB zu löschen. Es ist nur so, dass ein Datensatz aus dem SourceObject nicht gelöscht werden kann, solange noch Datensätze in einem der TargetObjects vorhanden sind.

Ehrlich gesagt kann ich die Befürchtungen nicht so richtig nachvollziehen, denn wenn die Datenbank sauber aufgebaut ist sind einer Applikation bestimmte Datensätze zugeordnet, die ich über den GORM dann löschen würde - undzwar NUR diese Datensätze, alle anderen sollten davon unberührt bleiben. Bei Associations klappt das ja auch. Wieso sollte die komplette UMGT-DB leer sein, wenn ich EINE Application lösche? Das kann ich garnicht nachvollziehen.

Edit: Achso, Megger: Es würde nur DANN eine Löschung aller verankerten Datensätze erfolgen, wenn er die rekursive Löschung auch bei Eltern-Elementen durchführen würde, ich spreche ja aber ausschließlich davon von dem zu löschenden Element in der Hierarchie nach unten zu gehen. Sprich: Wenn ich dein Schaubild anschaue und von oben nach unten die hierarchie verläuft würde die Löschung von einem E-Element nur in E Daten löschen, bei eine Löschung in B entsprechend in B, D und E, bei A entsprechend aus allen Datenbanken und bei C und D wieder jeweils nur in C bzw. D.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von Megger » 12.01.2012, 11:37:53

Wenn ich von E aus 'loadRelatedObject' mache, dann bekomme ich B geliefert, aber ich kann dir nicht sagen, welches dieser beiden Objekte das Eltern-Element ist!
Aber die Beziehungstabellen haben ja inzwischen Source und Target als Prefix, dadurch ist es dann auch möglich nur die Kinder zu löschen.
Beim UMGT würde beispielsweise durch ein Löschen einer Application die komplette Datenbank leer sein.
Durch löschen einer Application wären dann alle zugehörigen Objekte gelöscht (was ja so auch sein soll)

Aufpassen muss man bei folgendem Konstrukt

Code: Alles auswählen

Objekt A           Objekt B
        \         /
         Objekt C
Wenn ich nun Objekt A lösche, dann wäre auch Objekt C weg, welches aber noch mit Objekt B verbunden ist, d.h. man muss prüfen ob es beim Kindelement vielleicht noch ein anderes Elternelement gibt (darauf wollte ich bei meinem ersten Post auch eigentlich hinaus :D)
Normalerweise hat ein Kindelement ja auch nur ein Elternelement per CMP, aber es ist schließlich möglich, mehrere Elternelemente per CMP in Beziehung zu stellen, deswegen muss dort noch ein Extra Check eingefügt werden, sodass keine weiteren Löschungen vorgenommen werden (auch keine Kindelemente von C mehr)
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 12.01.2012, 15:44:25

Da ein Kind-Element immer fehlerfrei gelöscht werden kann wäre in diesem Fall nur dann ein Problem in der Form zu erwarten, dass in B nich ein Objekt steht, das ursprünglich auf ein Objekt in C gelinkt war, dieses jedoch gelöscht wurde. Sprich: Wenn du in A einen Datensatz löscht, werden alle Datensätze in B auch gelöscht UND die Verknüpfung zwischen den B-Objekten und dem C-Objekt wird gelöscht, das Objekt in C jedoch nicht. Das funktioniert jetzt ja schon problemlos, da der Gorm Kind-Elemente löschen kann. Was ich halt wollte ist das Löschen eines Eltern-Elements mit einem optionalen Parameter, über den ich angebe, dass alle verknüpften Kind-Elemente auch gelöscht werden sollen. Diese Funktion soll nicht (!) Standard sein, sodass ich sie explizit angeben muss. Habe ich tatsächlich ein derartiges Konstrukt, dass ich von mehreren Tabellen eine Eltern-zu-Kind-Beziehung zu einem Objekt aufbaue, muss ich natürlich wieder selber löschen. Was auf keinen Fall gehen sollte ist, dass durch die Löschung eines Kind-Elements die Eltern-Elemente gelöscht werden!

Dass du beim Auslesen nicht weißt, was Eltern und was Kind-Element ist ist für dich normalerweise auch irrelevant, der Gorm bildet es intern aber bereits korrekt ab, weshalb es beim Versuch ein Eltern-Element mit Kind-Elementen zu löschen zu einer Fehlermeldung führt, im umgekehrten Fall jedoch funktioniert.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von Megger » 12.01.2012, 17:39:24

Optional zuschaltbar ist klar!

Aber wäre es soviel Mehraufwand dies noch zu implementieren?

Code: Alles auswählen

[A2C]
Type = "COMPOSITION"

[B2C]
Type = "COMPOSITION"

[C2D]
Type = "COMPOSITION"

Code: Alles auswählen

$gorm->deleteObject($objectA, true) // Nur Datensatz Objekt A wird gelöscht, C nicht da noch benötigt
$gorm->deleteObject($objectC, true) // Datensatz Objekt C und Objekt D werden gelöscht
 
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 12.01.2012, 20:55:20

Rein theoretisch sollte das kein großes Problem sein.

Ich warte ja aber immernoch auf eine nähere Erläuterung von Christian, bevor über die genaue Implementierung nachgedacht werden sollte ;)
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von dr.e. » 13.01.2012, 22:32:32

Bei Associations klappt das ja auch. Wieso sollte die komplette UMGT-DB leer sein, wenn ich EINE Application lösche? Das kann ich garnicht nachvollziehen.
Weil das ein Baum aus komponierten Objekten ist. Alle Objekte sind unter Application komponiert und untereinander assoziiert. Löschst du nun das Application-Objekt automatisch rekursiv, sind alle Objekte inkl. deren (automatisch gelöschten) Assoziations-Beziehungen weg. Insofern muss man hier je nach Datenstruktur sehr vorsichtig mit dieser Option sein.

Ist jetzt klar, worauf ich hinaus möchte?
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 13.01.2012, 22:43:20

Aber ass-Verknüpfungen werden doch gar nicht gelöscht sondern nur die Verknüpfung!? Aber bei cmps wäre es durchaus sinnvoll, wenn die Kinder - sofern gewünscht - mitgeloscht würden. Und mir geht es nur darum, nicht jm die Löschung ALLER verknüpften Daten.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von dr.e. » 14.01.2012, 10:29:39

Hi Lutz,
Aber ass-Verknüpfungen werden doch gar nicht gelöscht sondern nur die Verknüpfung!?
Wenn du ein komponiertes Objekt löschst, das auch noch Assoziationen ausprägt, werden zuerst die Assoziationen, dann das Objekt Objekt selbst und anschließend seine Komposition gelöscht.
Aber bei cmps wäre es durchaus sinnvoll, wenn die Kinder - sofern gewünscht - mitgeloscht würden.

Genau da haben wir eben das Problem, dass du einen kompletten Kompositionsbaum löschen könntest - je nach dem von wo du auf den Baum schaust. Insofern habe ich bisher den Anwender des GORM implizit gewungen, sich konkret um die Löschung zu kümmern, damit keine solchen Effekte durch den GORM selbst erzeugt werden können.
Und mir geht es nur darum, nicht jm die Löschung ALLER verknüpften Daten.
D.h. ein Objekt einfach nur von seinen Assoziationen "befreien"?
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 14.01.2012, 15:57:03

Achso, ich ging - warum auch immer - davon aus, dass nur die Verknüpfung und nicht das verknüpfte Objekt bei ass gelöscht würden!? Immerhin darf das verknüpfte Objekt in diesem Fall durchaus alleine existieren und müsste für mein Verständnis eher manuell gelöscht werden, als die komponierten kind-Elemente... Hatte garnicht bedacht, dass das so ist - mit der Löschung...
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von dr.e. » 14.01.2012, 21:55:36

Ich schlage also vor, alles beim aktuellen Status zu belassen. Einverstanden?
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von MrNiceGuy » 16.01.2012, 09:07:37

dr.e. hat geschrieben:Ich schlage also vor, alles beim aktuellen Status zu belassen. Einverstanden?
So ein Schiet! Nunja, unter diesen Umständen schon. Es wäre dann wohl an mir eine Ableitung des GORM zu erstellen, der das etwas anders handhabt. Mal schauen, ob sich der Aufwand überhaupt lohnt - hängt von der Komplexität der zu löschenden Struktur ab.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Löschen gesamter CMP-Bäume?

Beitrag von dr.e. » 16.01.2012, 13:07:51

Gut, dann schau dir mal deine Anwendungsfälle an. Meine bisherigen zeigen, dass das Löschen - gerade mit Ralf's Domänen-Objekt-Feature - sehr gut gekapselt und sehr einfach abbildbar sind.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast