Какой первичный ключ использовать в моей базе данных SQLite? - PullRequest
0 голосов
/ 20 июля 2011

У меня есть файл .csv, который я превратил в базу данных SQLite с первым столбцом в качестве даты и времени (как тип данных TEXT, потому что он находится в формате 20.07.2011 12:00:00 PM), второйстолбец как подсекунда (REAL, например, 0,142857), а остальные столбцы - данные о времени.Я буду использовать его в качестве базы данных только для чтения в своем приложении для Android, в котором пользователь выбирает время начала и время окончания, а затем данные отображаются графически за этот период времени.

Я впервые использую базу данных, и я не уверен, как с этим работать.Я считаю, что мне нужен уникальный первичный ключ NUMERIC для каждой строки, но просто пометить их по номеру строки - пустая трата места.Первый столбец не является уникальным и, в любом случае, является типом данных TEXT, хотя, если подсекунду нужно каким-то образом включить, он будет уникальным.Но я действительно не могу переписать базу данных, потому что она имеет 65534 строки ... Как вы предлагаете мне обращаться к определенному времени в этой базе данных?

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

В Android вам нужен столбец с именем _ID в вашей базе данных (иначе вы столкнетесь с некоторыми проблемами позже). Вы будете использовать его в качестве первичного ключа.

Даты и время можно сохранить в SQLite в виде текстового столбца в следующем формате (см. http://www.sqlite.org/datatype3.html):

ТЕКСТ в виде строк ISO8601 ("ГГГГ-ММ-ДД ЧЧ: ММ: СС.ССС")

Если ваша база данных статична, просто используйте инструмент, такой как SQLite Database Browser, чтобы преобразовать ее в формат, удобный для Android.

0 голосов
/ 20 июля 2011

Любая дата может быть легко преобразована в цифровую метку времени:

Date date = new Date();
long timestamp = date.getTime();
Date otherDate = new Date(timestamp);

Числа НАМНОГО проще и быстрее обрабатываются, чем текстовые поля.Если вы абсолютно уверены, что у вас есть уникальные данные в столбце, вы можете использовать их в качестве первичного ключа.

Импорт файла CSV в таблицу также должен быть простым:

//just open file in some known way and read it line by line
// we have declared String[] data, String line is line read from your csv somewhere earlier 
// in code

data = line.split(",");
//here you have to process values, and execute insert statement

Вам необходимо создатьиндексы для каждого столбца, который будет использоваться для поиска или заказа данных.Также имейте в виду, что строки в таблице не имеют «по умолчанию», «натуральный» или любой другой порядок.Если вы выполнили один и тот же оператор выбора дважды, вы можете получить два совершенно разных результата в смысле сортировки.Так что просто оператор select должен выглядеть так:

select 
   _id, other_colum_name, some_other_column 
from 
   table_name
where 
   column_name = 5
   and other_column_name = 3
order by 
   column_name;
0 голосов
/ 20 июля 2011

Если ваша база данных является локальной и внешней (не удаленной), то у вас должна быть _id и другая другая таблица android_metadata, которая будет содержать локаль.

Если ваша база данных была удаленной. Да, вы можете, это только вопрос скорости, если вы пишете, поскольку вы этого не делаете. Использование предложения WHERE сделает всю работу.

...