Рассмотрим эту простую модель:
Базовая таблица Location:
+-------------------------------+
| Locations |
+-------------------------------+
|(PK) _id Integer Autoincrement |
| name Text(100) Not null |
| is_in_range Integer |
+-------------------------------+
И более специализированная таблица с именем WifiLocation:
+-------------------------------+
| wifi_location |
+-------------------------------+
| ssid Text(0) Not null |
| signal_threshold Real |
|(PK) _id Integer |
+-------------------------------+
Я хочу, чтобы эта модель представляла WifiLocation
, наследующую от Базовое местоположение
.
Поэтому я добавил предложение REFERENCES
в столбец _id
таблицы wifi_locations
следующим образом:
CREATE TABLE wifi_locations (_id Integer primary key references Locations(_id), ....)
Я пытаюсь добиться отношения 1:1 между эти таблицы.
Когда я хочу вставить строку в таблицу wifi_locations
, я сначала вставляю соответствующие значения (Name, IsInRange) в таблицу Locations
и получаю обратно Идентификатор строки
.
Затем я вставляю остальные данные (ssid) в таблицу wifi_locations
вместе с rowId в качестве внешнего ключа.
Таким образом, вставка в таблицу Location работает, и я получаю обратно идентификатор, но когда я пытаюсь использовать этот идентификатор и вставлять его в таблицу wifi_locations, я получаю SQL Constraint нарушения
ошибка. Подробностей о том, что именно пошло не так, нет.
Что-то не так с моей схемой? Есть ли лучший способ добиться такого моделирования?
РЕДАКТИРОВАТЬ:
Точная ошибка:
06-16 15:56:42.846: E/Database(2038):
android.database.sqlite.SQLiteConstraintException:
error code 19: constraint failed