Учтите неопределенное количество столбцов SQLite? - PullRequest
1 голос
/ 25 декабря 2010

Я пытаюсь создать таблицу SQLite для группы контактов, но я знаю, сколько контактов будет в этой таблице, так как я могу учесть ВСЕ контакты? Я мог бы создать один столбец TEXT и иметь String URI каждого контакта с разделителем. Я хотел бы поддержать широкий круг пользователей, работающих под управлением Android 1.5 и (поправьте меня, если я ошибаюсь) версия SQLite, которая работает на Android 1.5, не поддерживает внешние ключи (только Android 2.2 и выше). Что мне делать?

1 Ответ

1 голос
/ 26 декабря 2010

Вы можете смоделировать ограничения внешнего ключа на более старых версиях Android с помощью триггеров: http://www.codeproject.com/KB/android/AndroidSQLite.aspx

Оттуда вы можете просто иметь другую таблицу для групп (и любые метаданные, которые вы хотите связать с ней), изатем еще один для контактов, и у каждого контакта есть group_id, или, если вам нужно несколько групп для контакта, у вас также может быть другая таблица, содержащая только contact_id и group_id.

Итак, допустим, вы хотите набор контактов, и вы хотите набор групп контактов.И вы хотите, чтобы каждая группа содержала переменное количество контактов, и вы хотите, чтобы контакт был в переменной ammoun of groups, вам нужны три таблицы, таблица групп, таблица контактов и таблица группового контакта.В таблице групп будут все столбцы, которые нужны группе, плюс дополнительный столбец первичного ключа (обратите внимание, что он должен называться _id, потому что android предполагает, что он будет называться _id).Таблица контактов будет содержать все столбцы, необходимые для контакта, плюс дополнительный первичный ключ.Наконец, таблица groupcontact будет иметь три столбца (хотя вас интересуют только два из них), столбец первичного ключа, столбец group_id и столбец contact_id.

Наконец, если вы хотите связать всеЭлементы группы, в том числе все контакты, вы можете сделать что-то вроде этого:

<group_fileds>, <contact_fields> from <group_table>, <contact_table>, <group_contact_table> where <group_table>._id = <groupid> and <contact_table>._id = <contactid>

Где и из таблицы группового контакта.(Обратите внимание, что у android есть методы, продемонстрированные в их примере с блокнотом: http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html, также вы можете увидеть пример схожих (хотя и немного более простых) недавних поставщиков, которые я написал (хотя я еще не реализовал триггеры,поэтому он не будет работать должным образом в старых версиях Android): https://github.com/LeifAndersen/NetCatch/blob/master/src/net/leifandersen/mobile/android/netcatch/providers/ShowsProvider.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...