Datenbank SQL Lite hilfe?

2 Antworten

Passiert es wirklich so häufig, dass zwei Personen am selben Ticket arbeiten?

Wenn die DB es nicht hergibt, fallen mir spontan drei gängige Wege ein:

  1. Du setzt einen Lock auf den Datensatz, der bearbeitet wird. Hier ist es am kniffligsten, sicherzustellen, dass der Lock am Ende der Arbeit freigegeben wird. Sonst hast du einen gesperrten Datensatz, ohne dass ihn jemand in Bearbeitung hat.
  2. Du ziehst dir die Daten in den Cache und arbeitest nur auf dem Cache und wenn du fertig bist, speicherst du deinen Stand. Beim Speichern passiert Folgendes: Die Anwendung schaut, ob der aktuelle Stand des Datensatzes (DB) dem des ursprünglich geladenen entspricht. Wenn ja, dann speichern, sonst: Du kannst verschieden reagieren, z. B. Änderungen anzeigen und speichern nur, wenn gewünscht. Du kannst einbauen, dass Änderungen übernommen werden, die sich mit deinen nicht überschneiden. Außerdem kannst du eine Benachrichtigung schicken, wenn jemand bereits einen Datensatz geladen hat oder wenn du speichern möchtest, was ein anderer auch in Bearbeitung hat.
  3. Bei vielen Programmen gewinnt stumpf der, der seine Daten zuletzt gespeichert hat.

Wie gesagt finde ich das alles aber etwas "über". Eine einfache Absprache, wer was bearbeitet erspart dir sehr viel Entwicklungsaufwand.

Woher ich das weiß:Berufserfahrung – Programmierer

technik123260 
Beitragsersteller
 02.11.2024, 11:16

Also es ist so es sind 2 Personen die parallel zusammen nebeneinander sitzen und beide ein computer haben und beide machen gleichzeitig Einträge. Ich dachte an sowas wie die Nutzer machen Einträge diese landen noch nicht direkt in der Tabelle sondern werden in eienr Warteschlange eingereiht und später beispiel nach 5 Sekunden übertragen. das hört sich eigentlich machbar an ? oder ?

technik123260 
Beitragsersteller
 02.11.2024, 11:20
@technik123260

Alternativ was ich nicht getestet habe aber sehr sicher funktioniert ist das dass Programm auf 2 verschiedenen Ordnern platziert wird und beide programm erstellen ihre eigene Tabelle somit hat jeder ihre eigene Tabelle man müsste dann später nur beide kombinieren was halt wieder ein Arbeitsschritt mehr ist und ich will halt eigentlich das so wenig wie möglich zusätzlich gemacht werden muss.

Suboptimierer  02.11.2024, 11:20
@technik123260

Wenn zwei nebeneinander sitzen, sollte es noch einfacher sein, sich mündlich abzustimmen.

Aber gut. Du kannst die Änderungen in eine Warteschlange setzen und die Reihenfogle beliebig festlegen, aber in der einfachsten Lösung gewinnt immer der, der hinten in der Warteschlange steht und alle Änderungen der Bearbeitungen davor gehen verloren.

Deswegen habe ich vorgeschlagen, dass man die Daten vergleichen müsste oder einfach keine Änderungen zulassen, solange jemand den Datensatz offen hat.

Das schöne daran, dass du dir die Ursprungsdaten im Cache hältst wäre, dass du eine Rückgängfunktion anbieten könntest.

Oder, was in manchen Fällen auch Sinn macht ist einfach jede Änderung in einem Feld direkt wegzuschreiben.

technik123260 
Beitragsersteller
 02.11.2024, 11:23
@Suboptimierer

Ja die herausforderung ist ja das beide gleichzeitig EInträge machen sollen können. Sagen wir beide erhalten in einem Kundencenter Anfragen und man muss jetzt Tickets erstellen und wenn da laufend aufträge oder so rein kommen und diese in der Tabelle Dokumentiert werden müssen kann man schlecht immer den einen fragen ehm kann ich jetzt kurz auf die Tabelle drauf. das ist nicht das Ziel.

Suboptimierer  02.11.2024, 11:26
@technik123260

Du hast Recht. Die ganze Tabelle zu locken ergibt keinen Sinn. Ich sehe aber kein Konfliktpotenzial, wenn zwei Personen gleichzeitig ein neues Ticket erstellen. Jedes Ticket bekommt seine eigene Satzkennung. Da braucht nichts in eine Queue.
Ich würde mir die Satzkennung auch erst beim Schreiben holen, weil du sonst beim Abbruch Lücken bekommst.

technik123260 
Beitragsersteller
 02.11.2024, 11:35
@Suboptimierer

Ja aber ich habe es getestet ich habe das Programm 2x gestartet und dann Parallel versucht einträge zu machen und dabei entstehen entweder freie zeilen wenn der andere nutzer ebenfalls einträge macht. Die Tabelle selbst wird auch nicht Aktualissiert sodass der andere nutzer sieht das da gerade was eingetragen wurde. Das ist eigentlich so mein letztes hindernis dann wäre ich fertig aber hier komme ich irgendwie nicht mehr weiter

slaxxer  02.11.2024, 20:37
@technik123260

Du könntest mit Foreignkeys arbeiten und jede nachricht eine Id zuweisen die du wiederrum mit der Id des textes in der anderen spalte zuweist

https://www.sqlite.org/lockingv3.html

Das solltest Du definitiv gelesen haben. Die Änderungen zu queuen verbessert die Gesamtsituation ohnehin nicht.