Bagaimana cara merancang skema basis data kueri stasiun bus?


9

Kami memiliki data stasiun bus, dan kami ingin membangun aplikasi yang akan menyediakan jalur / banyak jalur untuk stasiun awal dan stasiun akhir yang diberikan.

Misalnya pengguna mencoba untuk mendapatkan saran jalur bus dari station1 ke station2.

Jika ada jalur bus yang dapat menutupi keduanya station1dan station2, jalur ini harus dikembalikan. Hasilnya mungkin terlihat seperti ini:

Step1: station1 -- station2

Jika tidak ada jalur bus langsung antara station1 dan station2, maka aplikasi harus mencoba menemukan rencana pertukaran, misalnya, hasilnya mungkin terlihat seperti ini:

Step1: station1 -- exchangestation

Step2: exchangestation -- station2

Sekarang kita memiliki data, tetapi kita tidak tahu bagaimana mendesain model data dalam database, bagaimana membuat skema untuk membuat kueri efisien?

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

Memperbarui:

masukkan deskripsi gambar di sini

Sebagai contoh, saya memiliki empat jalur bus (sebenarnya dua) masing-masing dengan warna yang berbeda:

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) 

Sekarang jika kita ingin menyimpan informasi ini dalam database untuk menanyakan rencana jalur bus untuk diberikan satu stasiun ke stasiun lain, lalu berapa tabel yang kita butuhkan, dan apa yang harus dimasukkan ke dalam setiap tabel?


@ giser.i juga memiliki masalah serupa. Anda dapat menjawab jika Anda melakukannya gis.stackexchange.com/questions/70253/…
scott

Jawaban:


6

Saya pikir Anda perlu membangun tabel lain yang mendefinisikan semua rute adalah sebagai kombinasi dari rute lain. Kemudian Anda kueri tabel ini dan bergabung dengan rute sebenarnya untuk mendapatkan geometri.

Jika kueri untuk 'dari stasiun' ke 'ke stasiun' dan setiap bagian memiliki 'dari stasiun dan' ke stasiun '. Tetapi Anda ingin menyertakan rute yang mengambil banyak bagian, Anda bisa memiliki tabel 'rute' lain yang memiliki sesuatu seperti:

  • 'nama rute', 'ID rute', 'dari stasiun', 'ke stasiun'

Anda juga memerlukan tabel bagian asli Anda, seperti:

  • 'nama bagian', 'ID bagian', dll ...

dan saya pikir Anda perlu tabel gabung lain seperti:

  • 'ID rute', 'ID bagian'

dan tabel itu menyimpan hubungan satu ke banyak antara rute dan tabel bagian, jadi, untuk contoh Anda di atas, Anda memiliki dua baris dalam tabel bergabung, satu untuk setiap langkah. Permintaan dilakukan pada tabel rute, untuk dari dan ke stasiun. Data yang dikembalikan, jika spasial, adalah detail dari tabel rute dan data spasial dari tabel bagian. Mungkin Anda menambahkan waktu dari setiap bagian atau apa pun.

Apakah itu masuk akal?


Faktanya, kita tidak memiliki tabel sekarang, kita hanya memiliki data asli yang merupakan format teks.
giser

Baiklah tidak apa apa. Saya pikir jawaban saya berdiri saat itu. Saya akan menggunakan tiga tabel.
Alex Leith

Saya memperbarui posting saya dengan contoh langsung, dapatkah Anda meluangkan waktu untuk memeriksa?
Giser

@ AlexLeith.i juga memiliki masalah serupa di sini gis.stackexchange.com/questions/70253/…
scott

3

Anda mungkin harus memilih alat untuk itu dan mengikuti skema kekuatan alat (misalnya pgRouting ).

Jika Anda ingin melakukannya tanpa tabel, Anda hanya perlu dua tabel untuk menyimpan simpul dan simpul.

Kuncinya adalah gambar Anda menunjukkan pendekatan spasial sementara sebenarnya Anda membutuhkan yang temporal (gambar tertunda). Bus tidak pergi dari simpul A ke simpul B. Bus pergi dari simpul A @ 12: 00 ke simpul B @ 12: 10 .

Jadi kami membuat simpul untuk setiap stasiun + simpul untuk setiap waktu keberangkatan dari setiap stasiun. Setiap node memiliki 3 tautan satu arah yang keluar darinya:

  • tautan ke tujuan bus (A @ 12: 00 - B @ 12: 10 biaya: 10 menit)
  • tautan ke bus berikutnya yang berangkat dari stasiun ini (A @ 12: 00 - A @ 12: 30 biaya: 30 menit)
  • tautan ke simpul dasar (A @ 12: 00 hingga A biaya: 0 menit)

Sekarang untuk menemukan koneksi dari titik A ke titik C kita memilih titik pencocokan paling awal di stasiun A dan menemukan jalan dari sana ke simpul dasar untuk stasiun C.

Node:

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

sudut

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


0

Ini adalah contoh kerja menggunakan javascript dan data dari OpenStreetMap. Model data mungkin bermanfaat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.