Здравствуйте!
Пишу андроид приложение, работающее с SQLite. У меня там картины, их авторы, всякое такое. Связь между картиной и автором - много к одному. Тоесть, у картины есть поле автор, которое ссылается на id автора. Если я удаляю автора, у которого уже есть картины, СУБД никак не оповещает о том, что нарушена ссылочая целостность.
Как можно обработать данную ситуацию? Мне нужно запретить пользователю просто так удалять автора, который используется в таблице "Картины"
В чём физический смысл удаления автора? Типа, был и его не стало? И с картинами также?
Может, лучше использовать поле со специальным признаком "неактивен/скрыт"?
1. Назначены ли у вас ссылки на внешние ключи? Если нет - почитайте этот раздел документации: https://www.sqlite.org/foreignkeys.html
Важный момент: в SQLite нет возможности добавить ограничение через ALTER TABLE, т.е. вот так: "ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY key_name REFERENCES ref_table.ref_key_name" как в стандарте. Придется удалить и создать таблицу с новой схемой, сохранив данные где-нибудь, если они нужны.
2. Проверьте этот момент: www.sqlite.org/pragma.html#pragma_foreign_keys
По умолчанию параметр установлен в OFF. Нужно в ON. Подключитесь к БД из терминала или клиента и измените значение.
Hakito: Убедитесь, что используемый метод выбрасывает исключение. Я не работал с Android API, но заглянул в документацию и там нашел несколько методов на вставку: insertOrThrow() выкидывает исключение, а insert() - нет. developer.android.com/reference/android/database/s..., java.lang.String, android.content.ContentValues)
бинарный файл, для удобства оперируемый SQL выражениями
можно оперировать, например, JSON выражениями - ejdb.org, leveldb.org
но от этого демона (СУ) там не появится, это все просто файлы
dimonchik2013: файл .sqlite - это бинарный файл БД, да. А само ПО SQLite и есть СУБД.
Для файловой системы всё есть "просто файлы". Главное - это API для работы с данными посредством SQL. Этот API и определяет ПО как СУБД.
да щаз )) запишите параллельно )) или большой файл )) да на 1024 ВПС
SQLite ведет себя как файл, она и есть файл
удобный, распространенный, с SQL интерфейсом, но файл