Mal eine rein konzeptionelle Frage:
Ich habe mit AutoIt eine Datenverwaltung geschrieben.
Die zugehörige, prall mit Inhalten gefüllte SQLite-Datenbank wird später mitgeliefert.
Bisher arbeitete nur ich selbst mit Programm und Datenbank.
Zu jedem neuen Eintrag erstellt SQLite bislang einfach eine fortlaufende Datensatz-ID, per Autoincrement.
Zusätzlich zur automatisch generierten Datensatz-ID habe ich auch ein Feld "Eigene ID". Dort kann z. B. eine Art Bestellnummer eingetragen werden, die natürlich in der Praxis wiederum eindeutig ist und sich niemals wiederholt. Aber sie kann prinzipiell frei vergeben werden.
Soweit der Ist-Stand (der so nicht unbedingt bleiben muss).
Problem nun:
Angenommen, rund um die Welt arbeiten künftig mehrere User mit meinem Programm und besagter Datenbank.
Jeder User soll natürlich in seiner lokalen Datenbank (ohne Online-Verbindung) neue Datensätze hinzufügen können.
Jeder spendierfreudige User soll seine Einträge aber auch mit den anderen Usern teilen können.
- Also ein Export neu angelegter Datensätze, die andere User in ihren eigenen Datenbestand hinzu "mergen" können, ohne dass es dort zu Konflikten mit bereits bestehenden Einträgen kommen darf.
Idealerweise sollte nach so einer Datensatz-Tausch-Aktion eine jede Datenbank eines jeden einzelnen Users die gleiche Anzahl Datensätze aufweisen (sofern jeder mitmacht).
Und - das ist der Punkt - alle Datensätze sollten dann überall die gleiche ID haben (so jedenfalls meine hemmungslose Wunschvorstellung).
Mir fällt als Lösungsansatz nur ein zentraler Server ein, der die Aktivitäten der User koordiniert und von sich aus überall eindeutige Datensatz-IDs vergibt.
- Das möchte ich aber möglichst nicht! Aus folgenden drei Gründen:
- Erstens empfinde ich das Verfahren als arg kompliziert (schwacher Grund, ich weiß).
- Zweitens als nicht hinreichend ausfallsicher. Jeder Server kann schon morgen dicht machen.
- Drittens mag ich es grundlegend nicht, wenn Software "nach Hause telefoniert".
Die Frage lautet also, ob es einen irgendwie dezentralen Ansatz für diese Problemstellung gibt?
Zum Beispiel der Art, dass jeder einzelne User "auf Antrag" einmalig eine (eindeutige) Art Namenskürzel zugeteilt bekommt, welches in die Datensatz-ID mit einfließt?
Also nix mehr mit simplem Autoincrement in SQL, sondern komplexere IDs.
Tatsächlich hätte so ein Namenskürzel was. Ich möchte es nämlich (pseudonymisiert) nachvollziehen können, welcher User welchen der untereinander geteilten Datensätze erstellt hat.
Schon allein deshalb, um Vandalen ausklammern zu können, die den Datenbestand (den ich ja selbst nutze!)mit Murks-Einträgen voll müllen.
Wirklich sicher vor Vandalen wäre man mit einer derart simplen Methode zwar nicht, aber es geht hier auch nicht um Hochsicherheitstechnik.
Vorrangiges Ziel ist halt, dass User ihre selbst erstellten Datensätze "spenden" können und dass andere User solche "Spenden" zu ihrem lokalen Datenbestand hinzu "mergen" können, wobei die Datensatz-IDs überall, in jeder einzelnen Datenbank, gleich sein sollen.
Mein Programm wird Freeware und mehrsprachig, es ist folglich kaum absehbar, wie viele User es weltweit mal geben wird.
Ein Namenskürzel aus nur zwei Buchstaben/Zeichen könnte daher etwas kurz sein. Aber die Datensatz-ID soll ja auch nicht irre lang werden. Bei mehr als 10.000 Datensätzen ist sie ja jetzt schon fünf Zeichen lang.
Es würde mich aber auch nerven, mich dauernd darum kümmern zu müssen, "auf Antrag" solche Kürzel an User schicken zu müssen. Zumal ich ja mal 'nen Unfall haben könnte etc. - die User sollen dann nicht im Regen stehen, sondern die Sache soll weiter laufen.
Ich denke, für die geschilderte Problemstellung müsste es doch schon längst kluge Ansätze geben. Aber ich habe keine gute Idee, wie so ein Ansatz aussehen könnte.
Wer weiß Rat?