Estou projetando um horário de barramento usando o SQL. Cada rota do ônibus tem várias paradas, preciso de uma tabela diferente para cada rota?
Pergunta
Estou tentando criar o banco de dados mais eficiente possível. Minhas rotas de ônibus têm cerca de 10 paradas. O ônibus começa no número um até chegar à 10ª parada e voltará novamente. Este ciclo acontece 3 vezes ao dia.
Estou realmente preso sobre como posso gerar com eficiência os tempos para os ônibus e onde devo armazenar as paradas. Se eu colocar todas as paradas em um campo e os tempos em outro, o banco de dados não será muito dinâmico.
Se eu armazenar todas as paradas uma a uma em uma coluna e, em seguida, os tempos de outra coluna, haverá muita repetição acontecendo mais abaixo, pois uma parada tem várias vezes.
Talvez eu esteja perdendo alguma coisa, apenas comecei a aprender SQL e essa é uma tarefa que fomos definidos.
Desde já, obrigado.
Solução
Você precisará de uma tabela que contenha seu Timetable
:
- ID da rota
- Stop ID
- Tempo
- Possivelmente outros campos conforme necessário (direção, sequência #, Block #, etc)
Eu recomendaria criar mesas separadas Bus Stop
(para armazenar nomes de parada, lat/longs, etc) e Route
(Para armazenar o nome da rota, a primeira parada, a última parada, a direção, etc.).
Você provavelmente já está ciente disso, mas a programação de ônibus pode ficar complicada muito rapidamente. Por exemplo:
Pode ser necessário designar determinadas paradas como "tempo de tempo" que aparecem nos horários impressos
Cada rota pode ter várias variações. Por exemplo, algumas versões podem começar ou terminar em uma parada de ônibus diferente
O cronograma provavelmente será diferente no sábado e domingo, e a maioria das agências muda seus horários trimestralmente
Pode ser necessário considerar alguns desses casos e construí -los em seu esquema.
Isso ajuda?
Outras dicas
Aqui está apenas uma (das muitas) maneiras de fazer isso:
Parece que você provavelmente quer ter um routes
Tabela, que descreve cada rota e tem um horário de início.
Então uma stops
mesa com descrições e tempos de espera pelo ônibus em cada parada.
UMA stopDistanceMapping
A tabela descreveria a distância entre duas paradas e o tempo de unidade entre eles.
Finalmente, você routeMap
A tabela vai vincular individual routes
com uma lista de stops
. Você pode então preencher seu routes
distância da mesa e tempo usando o tempo de espera de cada parada individual e os tempos/distâncias de stopDistanceMapping
.
Boa sorte!
Em uma primeira passagem (muito difícil), eu mantinha os horários de rota do ônibus em uma mesa como esta:
RouteID StartingLocationID EndingLocationID TravelTime
Além disso, eu manteria uma mesa de paradas como:
StopID Address City etc... (whatever other information you need about each location)
Para as próprias rotas, eu armazenaria:
RouteID StartingLocationID RouteStartTime
Obviamente, você deve adaptar isso às suas próprias necessidades, mas isso deve lhe dar um lugar para começar.