Rudimentäre Versionsverwaltung

Rudimentäre Versionsverwaltung

am 09.08.2006 21:53:00 von Guido Schmidt

Hallo,

gegeben sind folgende Daten

id | vorgaenger_id | status
---------------------------------
37 | 0 | 3
45 | 0 | 3
78 | 37 | 1
98 | 45 | 1

Nun möchte ich verhindern, dass für den Datensatz mit ID 78 der Status 3
gesetzt werden kann, solange der Vorgänger-Datensatz 37 noch Status 3
hat. Das darf nur möglich sein, wenn Datensatz 37 Status 0, 1 oder 2
hat. Vorhanden ist MySQL 4.0.27.

Im Endeffekt geht es um eine Art Minimal-Versionsverwaltung. Es sollen
nicht 2 Versionen desselben Objektes gleichzeitig den Status 3
(freigegeben) annehmen können. Ich würde das wenn irgendwie möglich
lieber auf Datenbankebene statt auf Applikationsebene sicherstellen.
Fällt da jemandem etwas ein?

Das Datenbankdesign ist für eine Art Versionsverwaltung denkbar
gruselig, aber das kann ich nicht ändern.

Vielen Dank!

Guido

Re: Rudimentäre Versionsverwaltung

am 10.08.2006 02:16:07 von Axel Schwenke

Guido Schmidt wrote:
>
> gegeben sind folgende Daten
>
> id | vorgaenger_id | status
> ---------------------------------
> 37 | 0 | 3
> 45 | 0 | 3
> 78 | 37 | 1
> 98 | 45 | 1
>
> Nun möchte ich verhindern, dass für den Datensatz mit ID 78 der Status 3
> gesetzt werden kann, solange der Vorgänger-Datensatz 37 noch Status 3
> hat. Das darf nur möglich sein, wenn Datensatz 37 Status 0, 1 oder 2
> hat.

Sieht nach einem wirren Datenmodell aus.

> Im Endeffekt geht es um eine Art Minimal-Versionsverwaltung. Es sollen
> nicht 2 Versionen desselben Objektes gleichzeitig den Status 3
> (freigegeben) annehmen können. Ich würde das wenn irgendwie möglich
> lieber auf Datenbankebene statt auf Applikationsebene sicherstellen.
> Fällt da jemandem etwas ein?

Bei passender Modellierung würde ein UNIQUE KEY ($OBJECT_IDENTIFER,
$STATUS) das Gewünschte leisten.

> Das Datenbankdesign ist für eine Art Versionsverwaltung denkbar
> gruselig

stimmt!

> aber das kann ich nicht ändern.

Tja, schade.

PS: hinreichend neue MySQL Versionen erlauben BEFORE UPDATE Trigger.
Das würde Möglichkeiten für einen Würg-Around eröffnen...


XL

Re: Rudimentäre Versionsverwaltung

am 10.08.2006 22:23:54 von Guido Schmidt

Axel Schwenke schrieb:

Vielen Dank für Deine Antwort. Ich bin kein MySQL-Spezialist, aber MySQL
verfügt in einigen Bereichen ja über spezielle Funktionen. Hätte ja sein
können, das man da irgendwas bauen kann.

> Sieht nach einem wirren Datenmodell aus.

Für die bisherigen Aufgaben war das ein sauberes, normalisiertes
Datenbankdesign. Nachdem das wohl schon einige Zeit solide läuft, möchte
man zu minimalen Kosten über das zusätzliche Feld Vorgaenger_id eine
rudimentäre Versionsverwaltung implementieren. Und da wird es nun an
diversen Stellen des Systems sehr gruselig.

Guido