Как организовать базу данных sqlite - PullRequest
0 голосов
/ 28 января 2012

это больше вопрос теории, чем что-либо еще.Я пишу приложение для Android, которое использует предварительно упакованную базу данных.Целью приложения является исключительно поиск в этой базе данных и возвращаемые значения.Я приведу несколько абстрактных примеров, иллюстрирующих мою реализацию и проблему.Пользователь может искать по: «Thing Name», и то, что я хочу вернуть пользователю, это значения a, b и c.Я изначально разработал базу данных, чтобы она содержала все на одном листе, и чтобы столбец 1 был key_index, столбец 2 был именем, столбец 3 был и т. Д. И т. Д. Когда пользователь выполняет поиск, курсор возвращает key_index, а затем используетчтобы вытащить значения ab и c.

Однако в моей базе данных «Thing alpha» может иметь значение a = 4 или a = 6. Я не хочу повторять данные в базе данных, то есть иметь несколько строк с одной и той же вещью alpha, только отдельные«а» значения.Итак, каков наилучший способ организации данных в данной ситуации?Должны ли я хранить все «имена вещей» на одном листе и все данные отдельно.Это действительно вопрос правильного проектирования базы данных, что для меня определенно чуждо.Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 29 января 2012

Есть такая вещь, как нормализация базы данных http://en.wikipedia.org/wiki/Database_normalization. Обычно вы хотите избежать избыточности и зависимости в сущностях БД, используя соответствующий дизайн с суррогатными ключами и внешними ключами и так далее.Ваша "вещь-аплфа" выглядит так, как будто вы хотите иметь таблицу "многие ко многим", например, одна или несколько песен принадлежат к одному или разным жанрам.Возможно, вы захотите создать словарные таблицы для хранения ваших идентификаторов, пар имен и внешних ключей, ссылающихся на эти таблицы.В вашем случае это будет в основном БД только для чтения, поэтому вы можете подумать о создании индексов с высоким FILLFACTOR процентом, но не думаю, что sqlite позволяет это делать.Есть много способов создать базу данных.Все зависит от цели БД.Вы можете начать с проектирования вашего оборудования, такого как размеры блоков raids / file systems / db, чтобы они соответствовали размерам блоков F-System, чтобы обеспечить оптимальный ввод-вывод и место для размещения ваших табличных пространств / файловых групп / индексов, чтобы сбалансировать i /о нагрузка.Вся теория / задача проектирования БД - это действительно глубокий предмет, который нельзя недооценивать, равно как и несколько предложений в ответе на переполнение стека.:)

0 голосов
/ 28 января 2012

без лучшего понимания ваших данных, вот мое предположение о том, что вы ищете.

table: product
- _id
- name

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