Antworten auf deine Fragen:
Neues Thema erstellen

Versionierung von Datenbankeinträgen

ovbb

es gibt für alles eine weg

hallo,

wollte mal fragen ob sich einer von euch schon mal mit versionierung in datenbanken auseinandergesetzt hat?

habe diesen gedanken gerade aufgegriffen, da mir ein projekt bevorsteht welches sich ändern kann und dann sehr viele änderungen nach sich zieht. möchte aber die änderungen aufs nötigste beschränken.

zum aufbau (angedacht):

- baumstruktur (wie menü) mit hauptkategorien, unterkategorien und abfragen.


  • HK1 (zb. farbe)
    1. UK1 (was ist deine lieblingsfarbe?)
      1. gelb
      2. rot
      3. ...

- jede abfrage hat eine bewertung zu einem system (zz sind es ca 40) - aus abfragen und systemen entsteht eine matrix mit zz 3000 werten

jetzt ist natürlich die schwireigkeit, dass sich HK, UK, abfragen, systeme und deren werte ändern können.

deshalb würde ich gerne von euch wissen wie ihr das umsetzen würdet?

danke im voraus
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Versionierung von Datenbankeinträgen

Was verstehst du unter "Änderungen"? Ändern sich die Bezeichnungen, die Inhalte, die Struktur?
Was ist eine "Abfrage"? Meinst du eine SQL-Anfrage oder meinst du "Was ist deine Lieblingsfarbe?"?
Welche Relevanz hat die Bewertung?

Es wäre nett, wenn du entweder das Problem abstrakter formulieren oder an einem konkreten Beispiel veranschaulichen könntest.


Duddle
 

berniecook

Photo-Fan

AW: Versionierung von Datenbankeinträgen

Hallo,
ich als Adminitsrator eines größeren Firmensharepoints kann nur sagen, dass über die Sharepointsoftware von Microsoft die von Dir angesprochene Versionierung vorhanden ist und von uns genutzt wird, um für Einträge (Kommentare) zu einer Datei eine Historie der Kommentare zu bekommen. Wie das genau funktioniert (programmiert) wird, kann ich Dir nicht sagen. Dies haben unsere IT Fachabteilungen auf Grund unserer Anforderungen in die von mir administierten Sharepointseiten eingebaut.

Grüße
 

rafoldi

Aktives Mitglied

AW: Versionierung von Datenbankeinträgen

Eine Versionierung von Dateien inkl. eines Lebenszyklus kann jede DMS (Dokumenten Management System) Software, inkl. Revisionssicherheit. Da wird die Sharepoint von MS nicht benötigt (gibt es auch in der kostenlosen Version).
Im Bereich Reporting und Weitergabe von Dateien etc. zu verschiedenen Systemen da ist Sharepoint schon richtig. Aber das war wohl nicht die Frage.
Denke eher das es um eine Versionierung von beispielsweise Projekten o.Ä. geht.

@OVBB
Erkläre doch mal ein wenig den Hintergrund und den Zusammenhang.
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

asugangsbasis für das datenmodel ist eine matrix welche als spaltenwert "Systeme" hat und als zeilen ergebnisse für fragen (sO, rot, gelb, grün, ...).

die einzelnen fragen sind in unterkategorienen zusammengefasst und bestimmte UK in hauptkategorien.

ziel ist es, dass die kategorien aus der db als webapp angezeigt werden und der user pro frage eine antwort auswählen kann (radiobuttons).

aus den ausgewählten antworten muss ich mir zu jedem system den dazugehörgen wert des wertpaares "antwort-system" suchen und auswerten.

ändern kann sich somit alles:
- texte der HK, UK, fragen sowie systeme.
- werte der wertpaare "antwort-system"


Ziel: versionierung.
- wenn version 1 aufgerufen werden alle daten laut v1 angezeigt und ausgewertet.
- wenn zukünftig eine 2 version dazukommt werden die änderungen in die anzeige und auswertung miteinbezogen(dh. werte und texte, zusätzliche oder wegfallende hk, uk, antworten usw.)

vielleicht ist das ja verstänlicher jetzt ...

wünsch euch ein schöne WE und freu mich auf ideen bis MO
 

Frankfurtez

Nicht mehr ganz neu hier

AW: Versionierung von Datenbankeinträgen

Ich habe es immer noch nicht verstanden, aber ich bin auch ein Einsteiger. Ich beschäftige mich erst seit 30 Jahren mit Datenbankprogrammierung (Oracle V).

Wenn du deine normalisierte Datenbank als Grafik hier reinstellst, dass man die Zusammenhänge sieht, und erkennt, was du versionieren willst, kann dir bestimmt jemand helfen.
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

Datenbankmodell gibt es noch keines ... ist ja in Aufbau. Möchte gerne die Versionierung von Anfang an einbauen.

So sieht die Ausgangslage aus:


Änderbar sollte (leider) alles sein mit Versionierung.

  • Angefangen mit den Texten der Systeme (oben) über die Einteilung (A, A.x, A.x.x).
  • Jeder Wert (Systeme, A, A.x, A.x.x) enthält einen Verweiß auf eine Überschrift in einem separaten Dokument mit Erklärungen. (Kann sich somit auch ändern).
  • Die Matrix-Daten (hier aus Schutzgründen mit "-1" dargestellt) können sich ändern.
  • Reihenfolgen können sich ändern (wobei das nicht das schwierigste ist)

Was ich umsetzen möchte:

  • Dynamisches generieren einer Webseite welche sich von den Daten in der DB ableitet.
  • User erhält Seite mit den Auswahlkriterien (0..1 von X oder Ja/Nein; A.x.x).
  • Aufgrund der Auswahl wird eine Bewertung erstellt und Systeme vorgeschlagen.
  • ...

Ziel:
Versionierung in Major/Minor.

  • Major: Änderungen an der Struktur
  • Minor: Änderungen an den Bewertungswerten ("-1")
  • ...
Hoffe es hilft weiter das komplexe Problem zu verstehen :)
 

Duddle

Posting-Frequenz: 14µHz

AW: Versionierung von Datenbankeinträgen

Major: Änderungen an der Struktur
Was ist für dich die Struktur?

Bisher sehe ich nur eine Matrix, dessen Spalten- und Zeilennamen (und -anzahl) sowie Werte sich ändern können.


Duddle
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

Struktur hab ich synonym für die Zeilen verwendet (Bezeichnung, Reihenfolge, Zugehörigkeit zu Parent, ...)
 

Frankfurtez

Nicht mehr ganz neu hier

AW: Versionierung von Datenbankeinträgen

Hoffe es hilft weiter das komplexe Problem zu verstehen :)

Nein. Es hilft nicht.

Ich muss dir auch ehrlich sagen, dass ich keine Lust habe einige Tage zu investieren, nur um die Aufgabenstellung zu verstehen. Es gibt sicher Leute in Wien, die so etwas kommerziell anbieten. Hast du ein Lastenheft nach DIN 69901 geschrieben?

Da du immer auf die Frontends abhebst: Solange dein Backend nicht steht, musst du dir wegen der Frontends keine Gedanken machen. Mit einer Datenbankprogrammierung anzufangen, wenn man nicht mal die Aufgabenstellung so beschreiben kann, dass sie andere verstehen, halte ich, gelinde gesagt, für vermessen.
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

sorry, aber es geht um ein designproblem.

es war nicht mein sinn, eine fertige lösung zu erhalten sondern anhaltspunkte wie man eine versionierung von datenbankeinträgen erreichen kann.

hab mitlerweilen das "point-in-time"-prinzip gefunden.

wie das ganze dann im konkreten aussieht ist eine andere sache und umsetzen muss eh ich es ...

leider ist bei dem projekt viel zu viel variable um es mit meinen bestehenden lösungen umzusetzen. musste mich bis dato noch nie mit einer so komplexen versionierung herumschlagen und deshalb hoffte ich auch auf euch.

im gunde ist es ja nichts anderes als eine variable matrix welche versionierungen vorsieht.

denk mal, dass man da schon ein paar stichworte liefern kann um mir eine hilfe zu geben.
 

Frankfurtez

Nicht mehr ganz neu hier

AW: Versionierung von Datenbankeinträgen

Ich möchte dir nicht zu nahe treten, aber das sind basics der Datenbankprogrammierung.

Ich weiß nicht, wie du den Index deiner Versionierung gestalten willst, numerisch, alphanumerisch, usw., aber mit den entsprechenden Triggern für update und insert (delete?) kannst du sowohl einen timestamp in eine dafür vorgesehene Spalte schreiben, wie auch den Folgeindex aus einer maxquery oder aus einer vorbereiteten Tabelle holen. Je nach möglicher Gleichzeitigkeit von Änderungen solltest du das Ganze in Transaktionen einbinden.

Willst du nur das Frontend Design machen, oder willst du die Anwendung programmieren? WPF arbeitet hervorragend mit dem SQL Server zusammen, dein Design kannst du in XAML machen, dazu brauchst du weder SQL, noch sonstige tiefer gehende Datenbankkenntnisse. Aber um mit dem Frontend Design anzufangen, muss erst mal die Geschäftslogik so klar sein, dass sie sich beschreiben lässt.
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

Ich möchte dir nicht zu nahe treten, aber das sind basics der Datenbankprogrammierung.

Basics? Naja, so würd ich das nicht bezeichnen. Sicher sind Abfragen die sich auf Daten beziehen Basics, doch hab ich von der PTA-Architektur bis dato noch nichts gehört.

Ich weiß nicht, wie du den Index deiner Versionierung gestalten willst, numerisch, alphanumerisch, usw., aber mit den entsprechenden Triggern für update und insert (delete?) kannst du sowohl einen timestamp in eine dafür vorgesehene Spalte schreiben, wie auch den Folgeindex aus einer maxquery oder aus einer vorbereiteten Tabelle holen. Je nach möglicher Gleichzeitigkeit von Änderungen solltest du das Ganze in Transaktionen einbinden.

Änderungen werden nur intern erledigt und werden sich in Grenzen halten.
Versionierung habe ich deshalb angedacht um Änderungen nachvollziehbar zu machen und die Fülle der zu ändernden Daten im Rahmen zu lassen. Wenn sich nur ein "Systemname" (Text) ändert dann ist es aus meiner Sicht nicht wirklich sinnvoll x-tausend neue Datensätze zu schreiben.

Willst du nur das Frontend Design machen, oder willst du die Anwendung programmieren? WPF arbeitet hervorragend mit dem SQL Server zusammen, dein Design kannst du in XAML machen, dazu brauchst du weder SQL, noch sonstige tiefer gehende Datenbankkenntnisse. Aber um mit dem Frontend Design anzufangen, muss erst mal die Geschäftslogik so klar sein, dass sie sich beschreiben lässt.

Muss beides machen :)
Mir hilft die Vorstellung des Frontends um eine Idee zu bekommen auf was ich alles achten muss und welche Daten ich benötige. Design bzw. Aussehen ist dabei nachrangig.

Die Geschäftslogik ist nicht aufregend.

User beantwortet Fragen zu den Gegebenheiten einer Baugrube.
- Form, Tiefe, gibt es Nebengebäude; wenn ja dann die Abstände zu diesen, gibt es Grundwasser, ...
- Aufgrund dieser Auswahlen werden:
--- die Punkte in der Matrix zu jedem System ermittelt.
--- über eine noch nicht definierte Methode (gibt noch Unstimmigkeiten bei den Experten welche die Beste ist) wird jedes System bewertet
- Bewertug wird angezeigt.
 

Duddle

Posting-Frequenz: 14µHz

AW: Versionierung von Datenbankeinträgen

Mein Ansatz wäre wohl, eine neue Version als eine neue Tabellenzeile zu verstehen.

Eine Matrix hat viele Einträge (oder wie du es nennst Wertpaare "Antwort-System"). Ein Eintrag ist in vielen Matrizen (unterschieden durch Version). Das ist eine n:m-Beziehung.
Ein Eintrag wiederum hat eine Zeile. Eine Zeile ist in mehreren Einträgen (wieder unterschieden durch Version), also 1:m. Gleiches gilt für die Spalten und die Werte. Der Rest sollte über Attribute abgedeckt sein.

Allerdings könnte man sicher argumentieren, dass ein Eintrag nicht in mehreren Matrizen vorkommen kann (ditto mit Zeilen in Einträgen, usw.), weil sie nicht automatisch die selben sind, wenn sie die gleichen sind. In diesem Fall wären die genannten Beziehungen 1:m und 1:1, respektive.


Duddle
 

Frankfurtez

Nicht mehr ganz neu hier

AW: Versionierung von Datenbankeinträgen

Muss beides machen :)
Mir hilft die Vorstellung des Frontends um eine Idee zu bekommen auf was ich alles achten muss und welche Daten ich benötige. Design bzw. Aussehen ist dabei nachrangig.

An ein Frontend eine Datenbank mit ihrer Struktur und Geschäftslogik hinten dran zu stricken ist, nun ja, unkonventionell. Vielleicht bin ich da zu konservativ, aber das beginnt als Patchwörk, und wird immer Patchwork bleiben, mit allen Konsequenzen für die Wartbarkeit, Weiterentwicklung, usw.

Mein Vorschalg für das Vorgehen:
Ausgangsdaten ermitteln (als Liste, da brauchst du keine Grafik)
Zieldaten festlegen (auch als Liste)
Erforderliche Auswertungen (Queries) festlegen und auf Erzeugbarkeit prüfen
Geschäftslogik festlegen (detailliert)
Datenbankstruktur entwickeln
Datenbank aufsetzen
Gespeicherte Prozeduren (deutsch: stored proceedures) zur Eingangsdatenvalidierung schreiben
Frontends entwerfen
Frontends entwickeln
Geschäftslogik schreiben und testen
Anpassungsarbeiten

Dein Vorgehen kommt mir vor, wie das eines Webdesigners, erst wenn das Aussehen steht, beginnt man mit HTML, CSS und Scripts.

Mein Ansatz wäre wohl, eine neue Version als eine neue Tabellenzeile zu verstehen.

Das war für mich so selbstverständlich, dass ich es nicht erwähnt habe. IMHO kann nur ein ganzer Datensatz eine "Version" (einen Index) haben. Sicher ist es auch möglich Einzelfeldeinträge zu indizieren, aber macht das Sinn? In erster Linie stehen dem mögliche Wechselwirkungen entgegen: falls eine Änderung zwangsläufig eine andere Änderung zur Folge hat, ist das bei Datensatzbearbeitung (=Zeile) eine Änderung, bei feldweiser Betrachtung sind das zwei Änderungen.
 

fakerer

Aktives Mitglied

AW: Versionierung von Datenbankeinträgen

User beantwortet Fragen zu den Gegebenheiten einer Baugrube.
- Form, Tiefe, gibt es Nebengebäude; wenn ja dann die Abstände zu diesen, gibt es Grundwasser, ...
- Aufgrund dieser Auswahlen werden:
--- die Punkte in der Matrix zu jedem System ermittelt.
--- über eine noch nicht definierte Methode (gibt noch Unstimmigkeiten bei den Experten welche die Beste ist) wird jedes System bewertet
- Bewertung wird angezeigt.

Ich verstehe es ja auch noch nicht, aber das hört sich für mich an wie
- User füllt ein Formular aus
- Daten speichern und Auswerten (Logik die die Bewertung vornimmt)
- Bewertung dem User anzeigen. fertig

die Formulardaten sind dann ja eh gespeichert und die Logik immer gleich also wars das und ich verstehe nicht warum man dazu eine Versionierung einer Matrix braucht.

Ausserdem welchen zweck soll die Versionierung hier erfüllen? Wird doch undurchschaubar wenn in eine Zeile und Spalte von Version zu Version was andres anzeigen kann.
 

Frankfurtez

Nicht mehr ganz neu hier

AW: Versionierung von Datenbankeinträgen

und ich verstehe nicht warum man dazu eine Versionierung einer Matrix braucht.

Das ist mir schon klar. Ich habe einiges an Anwendungen im Bauwesen programmiert, allerdings deutlich später als "Baugrube". Wenn du während eines Bauvorhabens Änderungen hast (bei mir TGA), dann bringt das immer Kosten mit sich. BER lässt grüßen. Haben alle Planungs- und Ausführungsbeteiligte Zugriff auf eine zentrale Instanz, lässt sich der aktuelle Projektstand sowie die Entwicklung von Einzelpositionen ablesen. Außer dem Index und dem Timestamp wird hier Veranlasser, Begründung, Genehmiger, usw. eingetragen.

Sind wir jetzt nicht etwas weit vom Kernthema dieses Forums abgeschwoffen?
 

fakerer

Aktives Mitglied

AW: Versionierung von Datenbankeinträgen

okay mit so was hatte ich noch nichts zu tun,
aber wenn man verfolgen will wer wann wo was geändert hat dann bezieht sich das nach meinen Hausvorstand eher auf die x und die -1, und da würde ich dann eher eine History zum jeweiligen Wert führen als eine Versionierung dann kann man auch mitprotokollieren wann wer was wie geändert hat.

vielleicht hast du recht mit der Themenverfehlung :)
 

ovbb

es gibt für alles eine weg

AW: Versionierung von Datenbankeinträgen

Ein Formular wird es im Frontend eh werden wobei ich dieses dynamisch aufbauen möchte.

In der jetzt verliegenden Version der Richtlinie gibt es eine Excel-Datenblatt mit ca. 70 Abfragen und ca. 42 Systeme in einer Matrix daraus ergeben sich für mich ca. 3000 Werte die jewels eine Abfrage und ein System darstellen.

Meiner Meinung nach ist der größte Wert in der Bewertung "Abfrage zu System" verborgen. Da liegt auch der größte Fehlerfall. (Neue Abfrage = 42 neue Werte; Neues System = 70 neue Wert).

Aus diesem Grund wollte ich für zukünftige Änderungen so wenig wie möglich daran ändern damit ein Wert (Abfrage zu System) so lange wie möglich aktuell ist egal ob sich die Bezeichnung oder die Verweise auf die in der Richtline stehenden Kapitel ändern.

Zusätzlich habe ich mir gedacht, dass ich durch die Versionierung auch anzeigen kann welche Verweise in den vorherigen Richtlinien (Versionen) vorhanden waren.

Bis auf die Wert (Abfrage zu System; aufgrund Erfahrungswerte entwickelt) ist alles auf eine Richtlinie behruhend (Bezeichnungen, Abfragen, Kapitelverweise, usw.).

Zudem dachte ich, dass ich durch die Versionierung auch einen Permalink-Mechanismus einbauen könnte. Dafür muss ich aber dann die Version wissen mit welcher die Daten abgespeichert wurden um diesen Datenstand anzuzeigen bzw. in eine neuere Version zu transferieren.
 
Zuletzt bearbeitet:

afr0kalypse

Allwissendes Karmameerschweinchen!

Wie Duddle schon sagte. Eine Version als eine Tabellenzeile. So würde ich's auch machen.
Beispiel tbl_hauptkategorie:
id_hauptkategorie, hauptkategoriename, erstellungsdatum, änderungsdatum, version
als beispielwerte hätten wir dann meinetwegen:
1, baugrubentiefe, 01.01.2014, null, 1
Jetzt werden die Daten geändert und es kommt zu einer neuen Version. Ergo neuer Eintrag:
2, Tiefe der Baugrube, 01.01.2014, 02.01.2014, 2

Wenn jetzt in anderen Tabellen Änderungen gemacht werden müssen, die damit zusammenhängen, gibst du denen die gleiche Version und hättest somit für jede Gesamtänderung eine eine Version als fortlaufende Nummer.
Du könntest auch eine Verknüpfungstabelle erzeugen, in der du nur die ID der jeweiligen Tabellen in eine eigene Spalte rein schreibst und dort am Ende eine Version einfügst.

Ist das jetzt das was du wissen wolltest?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.358
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben