1. enrem, 14.02.2019 #1
    enrem

    enrem Threadstarter Erfahrener Benutzer

    Hallo zusammen!

    ich möchte evtl. die UUID als Primärschlüssel verwenden. Hat jemand Erfahrung damit? Ich bin hin und her gerissen wie ich meine Primärschlüssel nun aufbaue.

    Konkret geht es um lokale SQLite-Datenbanken deren Daten später zusammengeführt werden sollen. Als Beispiel hätte ich da eine Kundentabelle mit einer Spalte idKunde und eine Rechnungstabelle mit der Spalte idRechnung. Die Rechnungstabelle besitzt ebenfalls eine Spalte idKunde da eine 1:N Beziehung von Kunde zur Rechnung besteht.

    Diese id´s würde ich gerne mit UUID´s füllen.

    String uniqueId = UUID.randomUUID().toString();

    In diesem Beispiel wird eine zufällige UUID erzeugt. Wie kann ich eine Namens oder Zeitbasierte UUID erzeugen?

    Würde mich über ein Feedback und eure Lösungsansätze freuen…
     
    Zuletzt bearbeitet: 14.02.2019
  2. deek, 14.02.2019 #2
    deek

    deek Android-Experte

    Hi.

    ich habe schon verschiedene Varianten durch.
    Gerne benutze ich konsekutive long ids, da man die besser von Hand verstehen und mappen kann während dem debuggen.
    Das ist aber immer mit etwas Arbeit verbunden.
    UUIDs sind natürlich super, weil sie unique sind, einfach zu generieren. Sie sind halt unhandlich.
    Von zeitbasierten UUIDs würde ich die Finger lassen. Da hab ich schon extreme Probleme erlebt wenn die Zeit auf dem Gerät nicht stimmt, Zeitumstellung etc.

    Wenn du mehrere Datenbanken später zusammen führen willst und die Datensätze ihren primary Key behalten sollen würde ich zu UUIDs tendieren. Dann hast du keine Probleme mit doppelten long/integer IDs.
     
  3. enrem, 15.02.2019 #3
    enrem

    enrem Threadstarter Erfahrener Benutzer

    Danke deek.

    Ja so ähnlich hatte ich das begonnen (Neuentwicklung). Bis ich auf die UUID´s gestoßen bin. Mein Ansatz war es zunächst über die 15 stellige IMEI zu lösen. Dabei wird immer nur eine Datenbank des jeweiligen Geräts synchronisiert. Die Datenbank bekommt den Namen der IMEI.

    Beispiel Datenbankname "123456789012345.sqlite"

    Spalte mit id

    id
    1
    2
    3

    idKunde
    "123456789012345_1"
    "123456789012345_2"
    "123456789012345_3"

    Dabei wollte ich den Inhalt als String und nicht als long ablegen damit ich über den Unterstrich die IMEI herauslesen kann. Möchte da nicht mit festen Werten wie left(15) arbeiten weil ich damit rechne das die IMEI mal länger werden kann. Mann weis ja nie.

    Eine virtuelle Spalte "QuelleIMEI" kann ich dann in etwa so generieren.

    SELECT substr(idKunde,1,instr(idKunde,"_")-1) AS QuelleIMEI, * From Kunde

    Der Zugriff am PC hält sich in grenzen. Ergebnis: 1 Mio. Zeilen in 403ms zurückgegeben.

    Hab da noch 2 Fragen?

    1) Spricht was dagegen die idKunde als String (Caracter) zu verwenden? Also so wie ich es begonnen habe?
    2) Wenn du zu nicht zeitbasierte UUIDs neigst (das mit dem Zeitproblem da stimme ich dir zu) wie kann ich dann in Android eine Namensbasierte UUID erzeugen? Ich habe das mit den Knoten noch nicht so ganz verstanden.
     
  4. deek, 15.02.2019 #4
    deek

    deek Android-Experte

    Für mich spricht nichts dagegen idKunde als String zu repräsentieren. Musst du mit UUIDS ja auch machen.

    Mit Name based hab ich auch noch nicht viel Erfahrung. Vielleicht hilft dir das hier: Guide to UUID in Java | Baeldung
    Ich sehe aber keinen Vorteil gegenüber random.

    Kleiner Hinweis noch: Denk dran, dass nicht jedes Gerät eine IMEI hat. Falls deine App auf Tablets ohne Mobilfunkmodul verwendet wird gibt es keine IMEI.
     
    enrem bedankt sich.
  5. enrem, 16.02.2019 #5
    enrem

    enrem Threadstarter Erfahrener Benutzer

    Danke für den Hinweis mit der IMEI. Daran hatte ich tatsächlich nicht gedacht. Das wäre echt übel geworden. Ich glaube dann werde ich eine Lösung dazwischen nehmen.

    Statt die IMEI verwende ich eine randomUUID. Die einzelnen ids wie idKunde oder idRechnung generierie ich wie schon angefangen über die laufende Nr plus UUID statt IMEI.

    Damit benötige ich auch keine Telefonrechte.

    Beispiel Datenbankname "123e4567-e89b-42d3-a456-556642440000.sqlite"

    idKunde
    "123e4567-e89b-42d3-a456-556642440000_1"
    "123e4567-e89b-42d3-a456-556642440000_2"
    "123e4567-e89b-42d3-a456-556642440000_3"

    Nachmals besten Dank deek.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Datenbank mit Kundendaten Android App Entwicklung 13.02.2019
SQLite Datenbank über die Dropbox synchronisieren Android App Entwicklung 25.01.2019
Kommunikation mit Advatange Database Server Android App Entwicklung 29.11.2018
Hilfestellung Appentwicklung Android App Entwicklung 29.09.2018
Eintrag in einer Datenbank mithilfe einer ListView löschen Android App Entwicklung 20.06.2018
Android Studio: Auf Datenbank mit zwei Spinner zugreifen. Android App Entwicklung 07.06.2018
SQLite Datenbank mit zwei Tabellen erstellen Android App Entwicklung 30.05.2018
Du betrachtest das Thema "UUID als Primärschlüssel in einer referenziellen Datenbank" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.