私は実際にバスのチケット予約システムを開発しています。プロバイダーには、多くのルートとさまざまな旅行があります。これらすべてをまとめてマッピングするかなり包括的なデータベースをセットアップしましたが、クロスルート予約に関しては、パスアルゴリズムを機能させるのに問題があります。
たとえば、ユーザーがモントリオールからシャーブルックに行きたい場合、ここでルート #47 と呼ばれるもののみを使用します。しかし、彼がシャーブルックの代わりにサットンに行く場合、彼はある時点でルート 53 に乗り換えなければなりません。
現在、たった 1 つの転送を検出することはそれほど難しくありません。しかし、複数のルートを横断するために彼ができるオプションが何であるかを検出するようになると、ちょっと怖い. SQL のみを使用して 1 ~ 3 ホップでこれを行うためのかわいくて比較的効率的な方法を考案しましたが、クライアントが残りの 2 つのルートにとどまらない可能性があるため、これらすべてをより広いスペクトルでどのように整理する必要があるのか 疑問に思っていますの命です。
これまでに考えたことの例:
StartingStop
joins to Route
joins to StopsOfTheRoute
joins to TransfersOnThatStop
joins to TargetStopOfThatTransfer
joins to RouteOfThatStop
joins to StopsOfThatNewRoute
[wash rince repeat for more hops]
where StopsOFThatNewRoute = EndingStop
問題は、ホップが 3 つ以上ある場合、データベースに正しくインデックスを付けたとしても、SQL サーバーがプレッシャーの下でかなり速く詰まると確信していることです。最終的には大きな障害を簡単に予測できます...
ありがとうございました