2016-03-11 2 views
1

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

В любом случае, приложение относится к метро: в этом метро есть много линий, а иногда некоторые остановки - . Между линиями (так, например, остановки 3 и 4 являются остановками линий 2, 7 и 9).

Итак, я сделал в SQLite stops таблицу:

+---------+-------------+------+ 
    | Field | Type  | Auto | 
    +---------+-------------+------+ 
    | id  | integer  | YES | 
    | name | varchar(20) | NO | 
    | lines | ?   | NO |   
    +---------+-------------+------+ 

Какой самый лучший способ справиться с общими остановками? Моя идея состояла в том, чтобы создать таблицу lines, а затем в поле линий таблицы stops положить список, разделенный запятой lines.id. Я не знаю, почему, но я чувствую, что может быть лучший способ.

Любое предложение оценено, и извините за действительно вопрос о нуме.

+0

Я категорически против идеи CSV. –

+0

@TimBiegeleisen: Я здесь, чтобы послушать другие идеи :-) –

ответ

1

Я хотел бы сохранить его простым и использовать таблицу lines, которая имеет идентификатор (первичный ключ), наряду с другими метаданными для линии (например, как name):

линии

(id, name) 

Затем создать таблицу для остановки:

останавливает

(id, name) 

Наконец, вы можете создать таблицу моста, который соединит линии с остановками:

моста

(lineId, stopId) 

Каждая запись в bridge таблицы представляет собой один линия, имеющая заданный стоп.

Обратите внимание, что использование CSV для представления строки, имеющей несколько остановок, является полностью , а не способ перехода сюда, поскольку он не дает возможности вашей реляционной базы данных бесполезно.

Update:

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

stopNumbers

(lineId, stopId, stopPosition) 

Стоп позиция может быть получена, зная идентификатор линии и идентификатор в стоп-х годов.

1

Вам нужно много-ко-многим, которая хранится в отдельной таблице, как это:

table lines_to_stops 
line_fk 
stop_fk 

Это реляционный мир ...

Заметьте, что записи в базе данных нет в любом конкретном порядке. Если вам нужно положить стопы в любой определенный порядок (которые вы, скорее всего, делать), вы должны хранить этот заказ в базу данных, а также:

table lines_to_stops 
line_fk 
stop_fk 
order_in_line 
+0

Я знаю, что записи не в определенном порядке, конечно ;-) Кроме того, вы не можете изменить идентификатор поля автоинкремента, поэтому, если они удалите или добавьте остановку в линию, вы можете легко потянуть свои волосы, если у вас нет другого поля. Извините за простой вопрос, но я не «играю» с базами данных уже более 10 лет. –

Смежные вопросы