2013-10-27 2 views
0

Я читаю книгу Android Database ProgrammingИмеет ли база данных поддержки андроида SQLite ключевые ограничения?

И мне интересно, чтобы узнать, что сказал здесь правильно:

для тех, кто хорошо разбирается в SQL программирования и баз данных схем, вы можете быть удивлены, если можно добавить триггеры и ограничения ключей к вашим схемам базы данных SQLite. Ответ: «Да, вы можете использовать триггеры, но нет, вы не можете использовать ограничения внешнего ключа».

, а также:

помнить, что база данных SQLite Android не поддерживает ключевые ограничения

Это странно для меня, потому что я знаю, что я могу использовать (с SQLite 3.6.19)

setForeignKeyConstraintsEnabled метод для включения FK ограничений, или я могу следовать this

Я запутался. Поэтому возникает вопрос: почему в вышеупомянутой книге говорилось, что FK не поддерживаются? Учитывая, что во время публикации (июнь 2012 г.) уже выпущен Android 4.0.3 (SQLite 3.7.4).

+2

Ограничения FK прекрасно работают в моих приложениях с 2.2+, поэтому я полагаю, что он может просто быть совершенно неправым ... – ianhanniballake

ответ

1

У автора может быть много причин не упомянуть (EG: книга могла быть написана, когда текущая версия SQLite была старше 3.6.19 и опубликована позже), но она не делает никаких смысл ответить/угадать, что в StackOverflow.

Имеет смысл упомянуть тот факт, что поддержка внешнего ключа была добавлена ​​в 3.6.19, но она не просто работает не в синем. Есть некоторые вещи, которые необходимо принимать во внимание для того, чтобы использовать их:

  • SQLite версия должна быть> = 3.6.19
  • Библиотека должна быть составлена ​​ни с SQLITE_OMIT_FOREIGN_KEY или SQLITE_OMIT_TRIGGER определенной
  • должен быть включен
  • Поддержка FK по заявке во время выполнения, с использованием команды PRAGMA foreign_keys

Следует также отметить, что ограничения FK по умолчанию отключены для обратной совместимости. Поэтому вам следует позаботиться о включении их для каждого подключения к базе данных.

Подробнее об этом можно узнать в official documentation.

+0

В некоторых случаях в книге рассказывается об уровне API 11 (Honeycomb), который использует SQLite 3.7. 4. – GVillani82

+0

Интересно. Во всяком случае, SQLite> = 3.6.19 является лишь одним из трех требований к работе с FK. Он все еще мог скомпилировать свою версию с флагом 'SQLITE_OMIT_FOREIGN_KEY'. –

+1

Хорошо, спасибо @Mosty – GVillani82

Смежные вопросы