วิธีออกแบบสกีมาฐานข้อมูลแบบสอบถามสถานีรถบัส?


9

เรามีข้อมูลสถานีรถบัสและเราต้องการสร้างแอปพลิเคชันที่จะให้สาย / หลายบรรทัดสำหรับสถานีเริ่มต้นที่กำหนดและสถานีปลายทาง

ตัวอย่างเช่นผู้ใช้ลองรับข้อเสนอแนะสายรถประจำทางจากสถานี 1 ถึงสถานี 2

หากมีรถบัสสายที่สามารถครอบคลุมทั้งสองstation1และstation2ควรกลับสายนี้ ผลลัพธ์อาจมีลักษณะเช่นนี้:

Step1: station1 -- station2

หากไม่มีรถบัสสายตรงระหว่างสถานี 1 และสถานี 2 ดังนั้นแอปพลิเคชันควรพยายามค้นหาแผนแลกเปลี่ยนตัวอย่างเช่นผลลัพธ์อาจมีลักษณะเช่นนี้:

Step1: station1 -- exchangestation

Step2: exchangestation -- station2

ตอนนี้เรามีข้อมูลแล้ว แต่เราไม่ทราบวิธีการออกแบบตัวแบบข้อมูลในฐานข้อมูลวิธีสร้าง schema เพื่อทำให้แบบสอบถามมีประสิทธิภาพหรือไม่

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

ปรับปรุง:

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่างเช่นฉันมีสี่บัสบัส (สองอัน) แต่ละอันมีสีแตกต่างกัน:

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) 

ทีนี้ถ้าเราต้องการบันทึกข้อมูลเหล่านี้ในฐานข้อมูลเพื่อสอบถามแผนการเดินรถบัสของสถานีหนึ่งไปยังอีกสถานีเราต้องใช้กี่ตารางและสิ่งที่ควรใส่ในแต่ละตาราง?


@ giser.i ยังมีปัญหาที่คล้ายกันคุณสามารถตอบถ้าคุณทำมันgis.stackexchange.com/questions/70253/…
scott

คำตอบ:


6

ฉันคิดว่าคุณต้องสร้างตารางอื่นที่กำหนดเส้นทางทั้งหมดในนั้นเหมือนกับการรวมเส้นทางอื่น ๆ จากนั้นคุณสอบถามตารางนี้และเข้าร่วมเส้นทางที่แท้จริงเพื่อรับเรขาคณิต

หากข้อความค้นหาเป็น 'จากสถานี' ถึง 'ไปยังสถานี' และแต่ละส่วนมี 'จากสถานีและ' ไปยังสถานี ' แต่คุณต้องการรวมเส้นทางที่มีหลายส่วนคุณอาจมี 'เส้นทาง' ของตารางอื่นที่มีลักษณะดังนี้:

  • 'ชื่อเส้นทาง', 'เส้นทาง ID', 'จากสถานี', 'ไปยังสถานี'

คุณต้องมีตารางส่วนเดิมของคุณเช่น:

  • 'ชื่อส่วน', 'รหัสส่วน', ฯลฯ ...

และฉันคิดว่าคุณต้องมีตารางการเข้าร่วมอื่นเช่น:

  • 'เส้นทาง ID', 'ส่วน ID'

และตารางนั้นจะเก็บความสัมพันธ์แบบหนึ่งต่อหลายความสัมพันธ์ระหว่างเส้นทางและตารางส่วนดังนั้นสำหรับตัวอย่างของคุณด้านบนคุณมีสองแถวในตารางเข้าร่วมหนึ่งแถวสำหรับแต่ละขั้นตอน การสอบถามจะทำในตารางเส้นทางสำหรับจากและไปยังสถานี ข้อมูลที่ส่งคืนถ้าเกี่ยวกับอวกาศเป็นรายละเอียดจากตารางเส้นทางและข้อมูลเชิงพื้นที่จากตารางส่วน บางทีคุณอาจเพิ่มเวลาจากแต่ละส่วนหรืออะไรก็ได้

มันสมเหตุสมผลไหม


ที่จริงแล้วเราไม่มีตารางตอนนี้เรามีข้อมูลดั้งเดิมซึ่งเป็นรูปแบบข้อความเท่านั้น
giser

ตกลงก็ไม่เป็นไร ฉันคิดว่าคำตอบของฉันยืนอยู่แล้ว ฉันจะใช้สามตาราง
Alex Leith

ฉันอัปเดตโพสต์ของฉันด้วยตัวอย่างสดคุณสามารถสำรองเวลาเพื่อตรวจสอบได้หรือไม่?
giser

@ AlexLeith.i ก็มีปัญหาที่คล้ายกันที่นี่gis.stackexchange.com/questions/70253/…
scott

3

คุณควรเลือกเครื่องมือสำหรับสิ่งนั้นและทำตามสคีมาแรงของเครื่องมือ (ตัวอย่างเช่นpgRouting )

หากคุณต้องการที่จะทำโดยไม่มีตารางคุณจะต้องมีสองตารางจริงๆเพื่อเก็บจุดยอดและโหนด

เคล็ดลับคือภาพของคุณแสดงวิธีการเชิงพื้นที่ในขณะที่ในความเป็นจริงคุณต้องมีวิธีชั่วคราว รถบัสไม่ได้ไปจากโหนด A ไปยังโหนดบีรถบัสไปจากโหนด@ 12: 00ไปยังโหนดB @ 12: 10

ดังนั้นเราจึงสร้างโหนดสำหรับทุกสถานี + โหนดสำหรับทุกเวลาออกเดินทางจากแต่ละสถานี แต่ละโหนดมีลิงค์เชื่อมโยงเดียว 3 จุดที่เชื่อมโยง

  • ลิงก์ไปยังปลายทางรถบัส (A @ 12: 00 - B @ 12: 10 ราคา: 10 นาที)
  • ลิงก์ไปยังรถบัสถัดไปที่ออกจากสถานีนี้ (A @ 12: 00 - A @ 12: 30 ราคา: 30 นาที)
  • ลิงก์ไปยังโหนดฐาน (A @ 12: 00 ถึง A ราคา: 0 นาที)

ตอนนี้เพื่อค้นหาการเชื่อมต่อจากจุด A ไปยังจุด C เราเลือกจุดจับคู่ที่เร็วที่สุดที่สถานี A และหาทางจากที่นั่นไปยังโหนดฐานสำหรับสถานี C

โหนด:

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

จุด

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

.i มีปัญหาที่คล้ายกันที่นี่gis.stackexchange.com/questions/70253/…
กอตต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.