Betrachten Sie dieses einfache Modell:
Eine Basisstandorttabelle:
%Vor%Und eine speziellere Tabelle namens WifiLocation:
%Vor% Ich möchte, dass dieses Modell eine WifiLocation
darstellt, die von BaseLocation
erbt.
Also habe ich eine REFERENCES
-Klausel in die _id
-Spalte der wifi_locations
-Tabelle wie folgt eingefügt:
Ich versuche eine 1: 1-Beziehung zwischen diesen Tabellen zu erreichen.
Wenn ich eine Zeile in die Tabelle wifi_locations
einfügen möchte, füge ich zuerst die entsprechenden Werte (Name, IsInRange) in die Tabelle Locations
ein und bekomme die rowId
zurück.
Dann füge ich den Rest der Daten (ssid) in die Tabelle wifi_locations
zusammen mit der rowId als Fremdschlüssel ein.
Also funktioniert das Einfügen in die Location-Tabelle, und ich bekomme eine ID zurück, aber wenn ich versuche, diese ID zu verwenden und sie in die wifi_locations-Tabelle einzufügen, erhalte ich einen SQL Constraint violation
-Fehler. Es gibt keine Details darüber, was genau falsch gelaufen ist.
Stimmt etwas mit meinem Schema nicht? Gibt es einen besseren Weg, eine solche Modellierung zu erreichen?
BEARBEITEN:
Der genaue Fehler:
%Vor% Sie sollten FOREIGN KEY
in Ihrer zweiten Tabelle mit dem Verweis auf PRIMARY KEY
in der Tabelle Locals erstellen. In SQLite FOREIGN KEYS
werden unterstützt, aber implizit nicht aktiviert, also müssen Sie sie zuerst aktivieren.
in Ihrer onOpen()
-Methode von SQLiteOpenHelper
.
Dann sieht Ihr FOREIGN KEY
wie folgt aus:
Also das funktioniert alles seit SQLite version 3.6.19
. Weitere Informationen finden Sie unter SQLite Foreign Key Support .
Tags und Links android sqlite inheritance database-design schema