нужна стратегия для жесткого запроса sqlite в Android - PullRequest
0 голосов
/ 03 мая 2011

Я максимально упросту.

Table A, an event table, has 4 columns: _id, timestamp, type, source_id
Table B, a source table for a type: _id, a number of other columns unique to B
Table C, a source table for a type: _id, a number of other columns unique to C
Table D, a source table for a type: _id, a number of other columns unique to D

Я храню до 200 таких событий (на данный момент может перейти в 1000-е), они будут иметь тип B, C, D. При загрузке этих событий мне нужно создавать объекты событий, которые выглядят примерно так

Event {
    id
    timestamp
    type
    source object (can be an object of type B,C,or D, which share a base class)
}

Моя единственная текущая стратегия:

  • вытянуть все объекты события
  • сделать 3 отдельных запроса (выберите * из B, где id в (compiled_list_of_ids_of_type_B), то же самое для c, то же самое для d)
  • Хранить результаты 3 вышеуказанных запросов в 3 различных хэш-картах, чтобы их можно было легко получить по id
  • перебирает объекты событий и сохраняет исходные объекты в их собственных событиях

Я не в восторге от этого, стратегия запросов кажется довольно неэффективной. Любые идеи о том, как сделать это более эффективно?

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

добавить таблицу ассоциации.

a2other bcd

запрос a и a2other

a2other скажет вам, какая таблица и какой идентификатор.

, затем вы можете отсортировать результат a2other и запросдо н.э. и d в единственном числе.

0 голосов
/ 03 мая 2011

Вы можете сократить до 3 запросов:

выберите из A, где type = "type, который приводит к B", соедините B с любыми необходимыми полями то же самое для C то же самое для D и пока вы читаете результаты, создайте по одному полному объекту события для каждой строки и вставьте их в любой контейнер, в котором вы храните окончательный список.
Это также может сэкономить немного памяти, учитывая, что вы не храните временные данные таким образом. Не так много, хотя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...