Начало работы с SQLite (Android) - PullRequest
0 голосов
/ 04 июня 2010

У меня ограниченный фон SQL, в основном небольшое количество манипуляций с HTML и в основном с уже существующими базами данных. Я пытаюсь создать базу данных, которая будет хранить информацию о времени для автобусных маршрутов. Так что в основном у меня есть разные маршруты с остановками для каждого маршрута, а затем список раз, когда автобус прибывает на каждую остановку. Вот пример таблицы времени с их сайта: Ссылка .

Мне интересно, как лучше расположить мою базу данных / таблицы?

Также, какова цель поля _id в каждой таблице?

Спасибо, Роб!

P.S. Извините, если мое отсутствие знаний по этому вопросу заставило меня опубликовать повторяющийся вопрос.

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

Поле id предоставляет уникальный идентификатор каждой строке, на который могут ссылаться другие таблицы в базе данных. Когда на него ссылаются таким образом, он называется внешним ключом. Это позволяет вам иметь одну таблицу с подробной информацией, например, об учащемся (имя, адрес и т. Д.), А затем однозначно ссылаться на этого учащегося в другой таблице, в которой говорится о членах класса.

Как правило, существует много разных способов размещения базы данных, которые лучше всего зависят от того, что вы хотите сделать с данными. Большая часть этого дизайна не уникальна для SqlLite, поэтому чтение реляционных баз данных в целом может быть полезным.

Один способ изложить ваш конкретный пример:

Таблица маршрутов: идентификатор, имя

Стоп таблицы: идентификатор, имя

Расписание: идентификатор, внешний ключ для маршрута, внешний ключ для остановки

1 голос
/ 04 июня 2010

Вы задали два вопроса:

  1. Поле 'id' является хорошим соглашением в качестве уникальной идентификации строки. Это не обязательно, и некоторые данные, которые имеют свой уникальный серийный номер для каждой строки, будут использовать этот серийный номер. Программы часто хотят искать всю запись по уникальной идентификации строки, поэтому поле должно быть первичным ключом. Обычно используемое предложение для создания идентификатора: «id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)». Уникальный идентификатор будет назначаться автоматически при каждом добавлении новой записи. См. Tizag MySQL Tutorial для подробного описания. Лично некоторые называют их "_id", например, "route_id", "bus_id", и ваш стиль может отличаться.

  2. Размещение ваших данных зависит от того, что вы хотите с ними делать. Я предполагаю, что для каждого автобусного маршрута вы хотите найти следующий автобус на определенной остановке через некоторое время, а затем, когда этот автобус прибывает на какую-то следующую остановку. Каждый маршрут имеет много остановок; остановка может быть разделена между маршрутами; маршрут меняется в течение дня, пропуская некоторые остановки; маршруты идут в двух направлениях; и т. д. Я бы добавил абстракцию «пробег», когда один автобус проезжает через остановки от начала до конца.

Мое первое предположение при его изложении было бы:

Маршрут автобуса имеет название, номер и другую информацию: "Красный № 1", "Юг и Запад", "Муни SF", "map: // ..."

Остановка имеет уникальное имя и другую информацию: "North Grand Mall". «Юг», «Под вишней, к западу от Гранд-авеню».

Прогон имеет номер маршрута, дни недели, направление, может быть порядковый номер прогона в этом направлении в тот день, может быть время начала / остановки для прогона: "63 (route_id для # 1 Red) "," обратное направление "," MTWRF "(рабочие дни)," 2 "(2-й прогон)," 7:00 "," 7:36 ".

Тогда у вас есть таблица расписания «Run_id», «Stop_id», «Stop Sequence Number», «Time».

Запишите вашу запланированную схему, а затем начните пытаться писать схемы для них. Не удивляйтесь паре множественных объединений "SELECT * из Schedule как S, Run как R, Bus как B для B ... ГДЕ B.id == R.bus_id и S.run_id == R.id и B .id = (запрошенная шина) и S.time> = now () и .... "Вы денормализуете производительность после того, как она заработает.

Это все мои бесплатные советы. :)

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