Datenbank Klausurfrage

Ich habe ein echtes Problem mit der folgenden Aufgabe. Ich hoffe irgendwer hat eine Antwort.
Habe jetzt schon stunden gegoogelt und bin am verzweifeln.

Ein Mehrbenutzer DBMS speichert in einer Datenbank die Messwerte einer
Maschine mit INSERT INTO. Viele Anwendungen lesen diese Daten.
a) Der Programmierer setzt AutoCommit auf true und den Primärschlüssel auf
AutoIncrement. Bewerten Sie diese Designentscheidungen (Begründung!).
b) Es werden nun die Messwerte mehrerer Maschinen gespeichert. Muss man
die Designentscheidungen revidieren? (Begründung!)

Gruß Tweety944

Hallo Tweety944,

Wenn Sie solche Aufgaben bekommen, sollten Sie zuerst analysieren, was wichtig ist und was eingehalten werden muß!

Wenn ich Ihre Aufgabe sehe und die Details nicht kenne, kehre ich Ihre Aufgaben um:

a) es ist wichtig, alle Messwerte vorrangig möglichst zeitgenau zu erfassen und keinen Messwerte zu verlieren!
b) es können viele Messwerte von vielen Maschinen gleichzeitig eingehen, der Primär-Schlüssel, der auf Primary-Index mit AutoIncrement gesetzt wurde, identifiziert den Erfasssungs-Satz zu 100 %
c) Die Abfrage der Daten ist secondär wichtig - Die können warten, Hauptsache primär, werden die Daten gespeichert!
d) Eine Revision ist evtl. notwendig

Begründung meiner Entscheidungen:
a) Bei einer reinen Messwert-Erfassung gibt es keine Abhängigkeiten, ein Auto-Commit führt zur 2. schnellsten Ausführung - besser wäre sogar die Ausführung ohne TRANSACTION, egal von wieviel Maschinen, durchzuführen!
b) Die Erhöhung einer ID als AutoIncrement verursacht eine etwas angehobene Verarbeitungszeit, weil ein Index geschrieben werden muß, dient aber der Eindeutigkeit der Auffindung des Satzes über diese ID. Hier ist abzuwägen, ob dies bei extrem hoher Anzahl der Messwerte, sinnvoll ist - meines Erachtens ja, da man dann lieber den Maschinenpark aufstocken sollte!

UND NUN ZUM VERSTÄNDNIS:

Transaktionen werden allgemein programmiert, um bei Nichteinhaltung von bestimmten Bedingungen, den Vorgang ggf. zurück rollen zu können, so als würde nichts passiert sein!

Ferner werden Transaktionen in Verbindung von referenzieller Intigrität verwendet. Damit hat man sich vor 25 Jahren wirklich abquälen müssen, wird aber heute bei den meisten Betrieben nach unten, heute nicht mehr verwendet - und ich bin sogar davon überzeugt, daß die meisten Programmierer, diesen Begriff gar nicht mehr kennen!

Bei referenzieller Intigrität würde man z.B. eine Warengruppe löschen, die dann alle Artikel löscht, sofern nicht z.B. Buchungen noch in den letzten 2 Jahren auf allen Artikeln der Warengruppe erfolgt sind! Hier eine falsche Bedingung nicht beachtet, führt zum Totalchaos! Heute kostet Speicherplatz nichts mehr! Also wenn es nicht unbedingt notwendig ist, führt man diese Schritte nicht mehr durch!

Dagegen schon in die andere Richtung, also bei der Datenerfassung oder bei der Datenübernahme aus Altsystemen (Datenmigration)! Also ein Artikel muß einer Warengruppe angehören, damit die Speicherung erfolgreich ist, weil man möchte ja später alle Artikel finden können, die einer Warengruppe angehören! Nur kann man die Artikel nicht „fallen lassen“, wenn diese nicht verjoinbar sind, sondern läßt diese am besten in eine Garbage laufen! Die Artikel, die joinbar sind, werden weiter transportiert und die anderen müssen geprüft werden und ggf. die Warengruppen nach erfasst werden. Man kann dann später die Garbage entsprechend auf den neuen Import „anhängen“ und erneut durch laufen lassen!

Bei Banken, werden sicherlich die höchsten Standards gesetzt haben, um mit Transaktionen korrekt zu arbeiten, wenn ich aber sehe, was für „Milliarden die Banken versenken“, bezweifle ich sogar hier eine korrekte Umsetzung! Stellen Sie sich vor:

a) Sie stehen vor der Kasse und wollen 1000 Euro haben
b) Ihr Freund läßt sich den gleichen Betrag, sich sekunden genau auszahlen
c) Genau im gleichen Moment erfolgt eine Lastschrift von 10.000 Euro
d) Ihr Konto ist nur über 1000 Euro verfügbar

REVISION NACH MEINER AUFFASSUNG:
Bei einer reinen Messwert-Erfassung, muß kein TRANSAKTIONS-KONZEPT vorhanden sein, selbst wenn viele Abrufer, diese Daten zum lesen abrufen wollen!

Ich habe ein echtes Problem mit der folgenden Aufgabe. …
Bewerten Sie diese Designentscheidungen

Viele Grüße
1awww.com Ihr Internet-Service-Provider

Detlef Bracker

Hi,

zu a würde ich sagen, dass das auf jeden fall so in Ordnung geht. Solange nur ein „Thread“ Messwerte schreibt und die anderen nur lesen kann er ohne Gefahr von deadlocks schreiben, und der autocommit übernimmt die Aufgabe das ganze in die Datenbank zu übertragen. Die anderen lesen dann immer den Stand der gerade in der Datenbank zu finden ist. Das autoincrement kann hier ganz einfach zum sortieren verwendet werden.

zu b; Hier ist das Problem etwas anders/größer. Da mehrere gleichzeitig schreiben wollen kann es beim commit zu Fehlern kommen. Da es beim autocommit normalerweise keine Möglichkeit gibt Fehler zu korrigieren wäre es in dem Fall besser die Transaktionen selbst zu verwalten. Hier fungiert der autoincrement nicht mehr umbedingt als indikator für die Reihenfolge der erstellten Messwerte, sondern nur mehr für die Reihenfolge in der sie in die DB geschrieben wurden. Man muss in dem Fall immer auf einen ErzeugeTimestamp als sortierung zurückgreifen. Trotzdem empfehlen die meisten DBs den Primärschlüssel mit einem autoincrement zu verwenden wenn nichts anderes einfaches zur Verfügung steht. Daher würde ich diese Entscheidung bestätigen, aber den autocommit nicht

LG
Hannes

Vielen Dank für die schnelle und sehr hilfreiche Antwort !

Vielen Dank für die schnelle und sehr hilfreiche Antwort !.