Wie SQLite Primärschlüssel sinnvoll benutzen?

J

jowu

Neues Mitglied
0
Hallo zusammen,

im Moment bin ich am Rätseln, wie ich sinnvoll mit ID-Primärschlüsseln in meiner Android-App arbeiten kann. Es sollen aus einer externen Datenbank die Daten regelmäßig über XML synchronisiert werden. Die externe Datenbank hat überwiegend alphanummerische und oft zusammengesetzte Primärschlüssel.

Ich weiß nicht so recht, wie ich beim Import effizient die Daten importieren kann und dabei die Fremdschlüsselbeziehungen erhalten kann. Eine Idee war, die ID-Keys mit einem Hash aus den Text-Primary-Keys zu berechnen. Ist das eine gute Idee?

Würde mich über Anregungen und best practices freuen. Sollte die Problembeschreibung nicht gut sein, will ich gerne weiter ausführen.

Johannes

-----
Vereinfachtes Beispiel für die externe Datenbank:

CREATE TABLE Currencies
(Currency CHAR(3 BYTE) NOT NULL,
Description VARCHAR2(50 BYTE) NOT NULL,
CONSTRAINT CURR_Primary_Key PRIMARY KEY(Currency));

CREATE TABLE Countries
(Country CHAR(2 BYTE) NOT NULL,
Name VARCHAR(30 BYTE) NOT NULL,
Currency CHAR(3 BYTE) NOT NULL,
CONSTRAINT Countries_Primary_Key PRIMARY KEY(Country),
CONSTRAINT CTRY_FK_CURRENCY FOREIGN KEY(Currency) REFERENCES Currencies(Currency));

CREATE TABLE Customers
(CustNr CHAR(4 BYTE) NOT NULL,
Name VARCHAR(50 BYTE) NOT NULL,
Country CHAR(2 BYTE) NOT NULL,
CONSTRAINT CUSTOMERS_Primary_Key PRIMARY KEY(CustNr),
CONSTRAINT CUSTOMERS_FK_CTRY FOREIGN KEY(Country) REFERENCES Countries(Country));

E.g.

Currencies:
CHF | Swiss franc
EUR | Euro
GBP | British Pound
USD | US-Dollar

Countries:
DE | Germany | EUR
IT | Italy | EUR
CH | Switzerland | CHF
US | USA | USD

Customers:
A001 | Mercedes AG | DE
B123 | Fiat S.p.A | IT
CD45 | General Motors | US
 
Hallo,

du kannst die Schlüssel übernehmen. Wenn du sie synchronisieren solltest, ist es nicht wirklich sinnvoll, eigene Schlüssel zu benutzen.
Dir sollte nur klar sein, das SQLite keine richtige Datenbank ist. Sprich das ganze ist wesentlich langsamer als auf einem Datenbankserver. Und die ganze Synchronisation mit dem Server kosten auch Zeit und Datenvolumen (Wenn kein WIFI vorhanden ist.)
Und ist aufwendig, wenn jede Datenoperation auf dem Server abgebildet werden soll.
Wenn es eine offline App sein sollte, hast du noch ein zusätzliches Problem. Auf den verschiedenen Geräten kann die Datenbank einen unterschiedliche Datenbasis haben. So kann es sein, das du Daten mergen muss (siehe Git):
 
  • Danke
Reaktionen: Kiwi++Soft
Vielen Dank, ich habe jetzt die SQLite-Datenbank auch mit alphanummerischen Schlüsseln angelegt und z.B. Joins funktionieren ohne spürbare Performanceprobleme. Habe also gelernt, daß es nicht unbedingt Surrogatschlüssel braucht, was in manchen Beschreibungen so herüberkommt. Das Thema Surrogat-versus-Natural Key ist ja ein altes.
 

Ähnliche Themen

R
Antworten
6
Aufrufe
1.014
swa00
swa00
M
Antworten
5
Aufrufe
1.077
markusk73
M
Zurück
Oben Unten