Bir otobüs istasyonu sorgu veritabanı şeması nasıl tasarlanır?


9

Otobüs istasyonu verilerimiz var ve belirli bir başlangıç ​​istasyonu ve bitiş istasyonu için hat / çoklu hat sağlayacak bir uygulama oluşturmak istiyoruz.

Örneğin, kullanıcı istasyon1'den istasyon2'ye bir otobüs hattı önerisi almaya çalışır.

Her ikisini de kapsayabilecek bir veri yolu hattı varsa station1ve station2bu hat döndürülmelidir. Sonuç şöyle görünebilir:

Step1: station1 -- station2

İstasyon1 ve istasyon2 arasında doğrudan bir veri yolu yoksa, uygulama değişim planını bulmaya çalışmalıdır, örneğin, sonuç şöyle görünebilir:

Step1: station1 -- exchangestation

Step2: exchangestation -- station2

Şimdi verilerimiz var, ancak veritabanında veri modelinin nasıl tasarlanacağını bilmiyoruz, sorguyu verimli hale getirmek için şema nasıl oluşturulur?

=============================================

Güncelleme:

resim açıklamasını buraya girin

Örneğin, her biri farklı renkte dört otobüs hattım var (aslında iki tane):

l1: A-B-C-D
l2: D-B-A (in fact, the l2 is the reverse of l1 except the l2 will skip station `C`.
l3: E-B-D-F
l4: F-D-B-E(reverse of l3) 

Şimdi, bir istasyondan diğerine verilen veriyolu hattı planını sorgulamak için bu bilgileri veritabanına kaydetmek istiyorsak, kaç tabloya ihtiyacımız var ve her tabloya ne konulmalı?


@ giser.i de benzer bir sorun var. bunu yaptıysanız
scott

Yanıtlar:


6

Sanırım tüm rotaları tanımlayan başka bir tablo inşa etmeniz gerekiyor. Sonra bu tabloyu sorgulamak ve geometri almak için gerçek yollara katılmak.

Sorgu 'istasyondan' istasyona 'ise ve her bölümün bir' istasyondan 've' istasyona 'olması durumunda. Ancak, birden fazla bölümde yer alan rotaları dahil etmek istiyorsanız, şunun gibi bir şeye sahip başka bir tablo 'yolları' olabilir:

  • 'rota adı', 'rota kimliği', 'istasyondan', 'istasyona'

ayrıca orijinal bölümler tablonuza da ihtiyacınız var:

  • 'bölüm adı', 'bölüm kimliği' vb.

ve bence başka bir katılma tablosuna ihtiyacınız var:

  • 'rota kimliği', 'bölüm kimliği'

ve bu tablo, yollar ve bölümler tabloları arasındaki bire çok ilişkiyi saklar, bu nedenle yukarıdaki örnekte, birleştirme tablosunda her adım için bir tane olmak üzere iki satır bulunur. Sorgulama, istasyonlar için ve istasyonlar için rota tablosunda yapılır. Uzamsalsa döndürülen veriler, rota tablosundaki ayrıntılar ve bölüm tablosundaki uzamsal verilerdir. Belki her bölümden ya da her neyse zamanlar eklersiniz.

bu mantıklı mı?


Aslında, şimdi tablolarımız yok, sadece metin formatındaki orijinal verilere sahibiz.
giser

Tamam sorun değil. Sanırım cevabım duruyor. Üç masa kullanırdım.
Alex Leith

Yayınınızı canlı bir örnekle güncelliyorum, çek için biraz zaman ayırabilir misiniz?
giser

@ AlexLeith.i de burada benzer bir sorun var gis.stackexchange.com/questions/70253/…
scott

3

Muhtemelen bunun için bir araç seçmeli ve aracın zorladığı şemayı izlemelisiniz (örneğin pgRouting ).

Bir tablo olmadan yapmak istiyorsanız, köşeleri ve düğümleri depolamak için sadece iki tabloya ihtiyacınız vardır.

İşin püf noktası, görüntünüzün zamansal bir yaklaşımı gösterirken, aslında geçici bir şeye ihtiyacınız var (görüntü beklemede). Otobüs A düğümünden B düğümüne gitmez. Otobüs A 12: 00 düğümünden B 12: 10 düğümüne gider .

Bu yüzden her istasyon için bir düğüm + her istasyondan her kalkış saati için bir düğüm oluşturuyoruz. Her düğümün 3 tek yönlü bağlantısı vardır:

  • otobüs güzergahına bağlantı (12: 00'da A - 12: 10'da B: 10 dakika)
  • bu istasyondan ayrılan bir sonraki otobüse bağlantı (A @ 12: 00 - A @ 12: 30 maliyet: 30 dakika)
  • Temel düğüme bağlantı (A @ 12: 00 ila A maliyeti: 0 dakika)

Şimdi A noktasından C noktasına bağlantıyı bulmak için A istasyonunda en eski eşleşme noktasını seçiyoruz ve oradan C istasyonu için temel düğüme gidiyoruz.

Düğümler:

id|station|time
---------------
1 |A      |NULL
2 |B      |NULL
3 |A      |12:00
4 |B      |12:10

köşe

id|start_node|end_node|line|cost
---------------------------
1 |3         |4       |l1  |10
2 |3         |1       |NULL|0
3 |4         |2       |NULL|0

.i burada da benzer bir sorun var gis.stackexchange.com/questions/70253/…
scott

0

Javascript ve OpenStreetMap verilerini kullanarak çalışan bir örnek . Veri modeli faydalı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.