ルヌト癟科事兞のデヌタベヌス構造

「郜垂/郊倖の茞送ルヌトの癟科事兞にどのような圢匏の蚘録保管を遞択するか」ずいうトピックに関する゚ッセむをフリヌスタむルで。



䜕よりも、このテキストを曞くずき、私はプログラミングの分野の知識の残党に導かれ、同時に「デヌタベヌスに曞き蟌む通垞の圢匏」の抂念を自分自身で再考したした。





1.私が初めお行く倖囜の郜垂のバス/トロリヌバスのルヌトを芋るこずができるシステムが欲しいです。 最も基本的な堎合は、どのように進むか、どの亀差点で曲がるか、どこにあるかを知るだけでよく、停車地に぀いおは、指揮者たたはドラむバヌず話をしたす。 最もコヌシャの豪華な堎合-旅行にどれくらいの費甚がかかりたすか、移動の間隔、ドラむバヌの亀換ができるように、そのような詳现なルヌトのあらゆる皮類の蟛い詳现。

これらの詳现の入手先
正匏な情報源からの情報は、テキスト圢匏で䞍完党な圢で、たたは個々のルヌトごずにかさばるビットマップむメヌゞの圢でしか取埗できたせん。 だから、私たちは人々に頌っおいたす-地元䜏民や旅行者。 私たちは䞀人䞀人を個人的に聞くこずはできたせん。぀たり、このようなルヌトりィキペディアを行っおいたす。

ルヌトWiki以降、最適な圢匏のデヌタストレヌゞがある堎合、グロヌバルな性質のものではないず䞻匵したす。



癟科事兞のナヌザヌは、地元であろうずなかろうず、街を蚪れた人であろうずなかろうず、䞻に暙識ず暙識、぀たり碑文によっお導かれたす。 碑文はどこでも珟地語で曞かれおいたす。 ぀たり、䟋えばゞョヌゞアやラトビアに行った人が、そのようなシステムからのキリル文字の印刷に本圓に集䞭するこずはできないずいうこずは論理的です。

もちろん、これはナヌザヌむンタヌフェむスには関係ありたせん。ナヌザヌは、垌望するWeb銃口の蚀語を自由に遞択できたす。 ただし、適切なストップ名は垞に元の蚀語で曞くように求められるのが最善です。 倧きな垌望があれば、「ロシア語ぞの転写」分野を固定するこずが可胜になりたすが、これは明らかに優先課題です。 そのため、むンタヌフェヌスはカスタマむズ可胜です翻蚳するボランティアがいたす、ストップはロヌカルですロシア-ロシア、フィンランド-フィンランド、りクラむナ-りクラむナなど デヌタベヌスはそれを傷぀けないので、䞀般的なむンタヌフェむスで決定できたす。




2.ルヌト゚ンサむクロペディアは、実際には䜕らかのDBMSである必芁がありたす。 ぀たり、すべおのルヌトをデヌタベヌスに入力する必芁がありたす。 そのようなデヌタベヌスのレコヌドの圢匏を決定する必芁がありたすが、これは簡単に凊理でき、DBMSで䜕かが倉曎された堎合でも、叀いデヌタベヌスを匕き続き䜿甚できるこずが望たしいです。 蚘録が䞍必芁でなく、より必芁であったこずが必芁です。



3.蚘録には䜕が必芁ですか 基本的に、ID、ルヌトトレヌス、およびメタデヌタが必芁です。

idを䜿甚するず、すべおが明確なように芋えたす。぀たり、識別子自䜓です。 ルヌトのルヌトは、busが乗客ず順番に通過する地理的ポむントのセットであり、これらのポむントの䞀郚には停留所乗降がありたす。 各トラックは最初のストップで始たり、゚ンドで終わりたす。 ルヌトが埪環的であっおも、ルヌトが条件付きで開始する堎所を芋぀けるこずができたすたずえば、通垞、車はルヌトで生産を開始したす。 最初の停止地点から最終的な停止地点方向を含むたでの1本の砎線が衚瀺されたす。 それ以倖はすべおトラックではありたせん。 たた、車䞡のUタヌンはそうではありたせんその前にすべおの乗客がタヌミナルで远い出されたす。そしお、圌らが蹎られない堎合、原則ずしお、Uタヌンをルヌトの䞀郚ず芋なすこずができたす。しかし、ずにかく-Uタヌン前の「最終」ず「初期」であり、実際の生掻では、少なくずも正匏に。



すべおのバリ゚ヌションの1぀のルヌトに関連するメタデヌタがありたす。これは、その番号を持぀個別のバス%%がどのルヌトを取るかに䟝存したせん。 このタむプのメタ情報の顕著な代衚は、実際のルヌト番号です。 特定のルヌトにのみ適甚されるメタデヌタがありたすそれらは䞻に旅行の時間-費甚-空間パラメヌタを蚘述しおいたす。 これは、それらを察応するトレヌスずずもに衚瀺する必芁があり、前のタむプのメタデヌタずは関係がないこずを意味したす。

このように芋える堎合、デヌタベヌス構造は次のように芋えたすid; トラックに䟝存しないメタデヌタ。 それらにのみ関連するメタデヌタを持぀トレヌスのいく぀かのセット。



3+。 小さな詳现。 ルヌトの統蚈的倧郚分は、レヌルかトラックレスかに関係なく、1぀のIDに察しお正確に2぀のルヌト「そこ」ず「戻る」が必芁です。 この事実により、デヌタベヌス内の蚘録圢匏を遞択する際に䜕らかの制限を匷いられるべきではありたせんが、むンタヌフェヌスず怜玢を開発する際には考慮すべきです。 たずえば、ナヌザヌがルヌトの特定のバリ゚ヌションを芁求する堎合、ほずんどの堎合、特にルヌトが芖芚的に乱雑にならないため、盎接ルヌトず戻りルヌトの䞡方をすぐに芋る方が䟿利です。

ただし、䞀方の端だけでも、䞀床にルヌトのすべおのルヌトをマップ䞊に描画するず、これはマップを繰り返し描画された線で混乱させ、泚意をそらしたす。



3 ++。 たずえば、1秒おきに発車するbusが異なるルヌトルヌトたずえば、ある皮のアレむたたはステヌションにドラむブするがある堎合、ポリモヌフィックルヌトのケヌスがありたす。 モスクワにはこのようなルヌト365がありたす-それ自䜓はありたせんでしたが、圌らは私に蚀ったそれは1぀のルヌトず芋なされたすが、実際には同じ番号で4぀のルヌトが隠されおいたす。 そしお確かにそれらの特定の次はバスのフロントガラスの印によっお垞に譊告されたす。 実際には、「365」、「Aに停車する365」、「365を介しおB」、「365を介しおAおよびB」の4぀の異なるルヌトがありたす。 ルヌトは実際には4぀異なるため最初の停留所の近くからポむントAに向かっお䜜業する堎合、4぀の結果のうち2぀だけが萜ちるはずです-したがっお、特にそのようなルヌトの圧倒的倚数があるため、4぀の異なるIDでそれらを提案および保存したす。 繰り返したすが、䜿いやすさはそれほど苊しみたせん。 デヌタをナヌザヌに出力するずきに、「類䌌ルヌト」のリストのようなものをナヌザヌに簡単か぀簡単に衚瀺できたす。



4.ルヌトストレヌゞモデルが遞択されたので、メタデヌタに぀いお考えるこずができたす。 さらに、それらの䞀郚は特定のルヌトに䟝存し、䞀郚は特定のルヌトにのみ䟝存したす。それらは2぀のグルヌプに分けるこずができたす-手動で入力する必芁があるグルヌプず暙準化された同じ方法ですべおのデヌタを保存するためにナヌザヌは䞎えない方が良いでしょう。 たずえば、すべおの地理デヌタ連邊地域郜垂の囜を暙準圢匏で保存する必芁がありたす。そうしないず、タグをすばやくスムヌズに固定できたせん詳现に぀いおは、10項を参照しおください。 google maps APIなどの圢匏で情報を取埗するず䟿利です。 GEOSのような代替手段があり、䟋ずしおのみGoogleマップを遞択したした。

これからは、「郜垂」ずいう蚀葉の䞋のすべおの堎所で、同時にそれに関するメタカテゎリヌの完党なセット、぀たり囜-地域-郜垂を意味したす。



5.カタログから1぀の郜垂ぞのルヌトを匷制的に蚘録する必芁はありたせん。そうでない堎合、郊倖のルヌトでは倚くの疑問が生じたす。 DnepropetrovskずDneprodzerzhinsk近いのような2぀の双子の郜垂間のルヌトは、さらに倚くの疑問を投げかけたす。 しかし、少なくずもルヌトに䜕かを接続する必芁がありたす。さもなければ、「トラム30番」のリク゚ストに応じお、モスクワ、サンクトペテルブルク、キ゚フ、ヘルシンキから30番のトラムを取埗するリスクがありたす。 さらに悪化するのは、同じモスクワ内で、れレノグラヌドのバス番号1、コロレフのバス番号1、最初のバスが2぀あるこずです。 バスの出発地を瀺すIDごずに特別なフィヌルドを䜜成する必芁がありたす-「ルヌトが割り圓お/承認されおいる郜垂」など半自動-リストから遞択するか、Google APIにアクセスできる地図をクリックしたす。 比Fig的に蚀えば、このフィヌルドは「ホヌムポヌト」ず呌ばれたす。



私の考えを理解しやすくするために、䟋

-Nerezinovaには同じ番号のルヌトがありたす1コロレフ; 1c; 1れレノグラヌド; 1ヒムキ。 このトリッキヌなフィヌルドぞの最初のルヌトでは、「コロレフ」、2番目の「モスクワ」、3番目ず4番目の「れレノグラヌド」、「ヒムキ」をそれぞれ蚘述したす。 ナヌザヌがA地点からB地点たでの道路を怜玢するず、AずBが完党にモスクワにいる堎合でも、「バス1」ずいう回答の代わりに「バス1コロレフ」を返したす。 もちろん、怜玢のポむント「から」ず「どこ」が䞡方ずも「ホヌムシティ」にある堎合、このフィヌルドは衚瀺されない可胜性がありたす。 他の甚途の䞭でも、このフィヌルドはカタログ化の基瀎であり、同じ郜垂の同じルヌトず戊う手段です。



別の䟋セバストポリ垂のバス70は郊倖にあり、セバストポリのかなりの郚分を通過しおから、郊倖を通っおフォロスに到着したす。 誰かがForos内たたはForosからルヌトを怜玢し、この同じバス番号70を受け取った堎合、「70Sevastopol」ずそのフルルヌトが衚瀺されたす。これはナヌザヌに干枉する可胜性は䜎いですが、圌を助けたす。 私は誇匵しおいたすフォロスのナヌザヌは、ある時点で2぀の70のルヌトから匕き枡しを受け取る可胜性がありたす。ここでは、衚瀺圢匏「70セノァストポリ」、「70ダルタ」は単に圌を救いたす。



6.次に、必芁であるず刀断したメタデヌタのリストを提䟛したす。これはすぐにルヌト党䜓に適甚されたす。 それらに぀いおのコメントもありたす。



最小限のナヌザヌの自由で満たされるべきフィヌルドは、括匧自動たたは半自動でマヌクしたす-埌者はリストからの遞択を提䟛したす。



すぐにルヌト党䜓に垰属するメタデヌタ

-「レゞストリの郜垂」-5.を参照

-トランスポヌトのタむプセミオヌト-リストから遞択-1぀のドロップダりンリスト。 䟿宜䞊、ナヌザヌはカテゎリに分類できたす。たずえば、鉄道地䞋鉄、路面電車、垂電、ケヌブルカヌ、モノレヌル、その他の゚キゟチック、氎フェリヌたたは川の路面電車、ずころでセノァストポリからの挚拶、地䞊バス、トロリヌ、シャトルタクシヌ。

-ルヌト番号-原則ずしお、これはテキストフィヌルドです。 理由 "422d"; 3-trトラムのキャンセル時のバス。 たたはAeroexpressやSkyBusでさえも。 ただし、長さなどを制限する必芁がありたす そうしないず、デヌタベヌスおよび単䞀の倧郜垂のルヌトの出力に、郊倖および郜垂間ルヌトの長い番号のない名前「Orekhovo-Zuevo-Spasokukotsko-Narochnenskoe」が散らかり、単䞀のメガロポリスのルヌトの「カタログ」が恐怖のうめきなしで芖聎できなくなりたす。 そしお䞀般的に、私は個人的にそのようなルヌトはバスステヌションによっお完党にサヌビスされるべきであるずいう信念を固守したす。

-運送業者-可胜であれば、法人所有者の完党な所有暩の圢匏を含む名前。 ちなみに、ここではタグの䜿甚も適切であり、タグjurだけでなく、指定するずころたでです。 運送業者の人だけでなく、ルヌトにサヌビスを提䟛しおいるATP /コンボむ/デポの人公共亀通機関のある巚倧郜垂に関連し、非垞に興味深い。

-運賃-ルヌトのコストは倚くの堎合固定されおおり、ルヌトに䟝存したせん-運送業者/ルヌト番号のみに䟝存したす。 しかし、そうではない堎合もありたす。たずえば、高速道路の䞀方通行などによる垰りのルヌトが非垞に長くなり、民間キャリアが別の料金を請求する堎合などです。 これはたれなので、コストはルヌトのグロヌバルフィヌルドです。 故郷に基づく通貚の自動代替は、もちろん矎しいです。 ただし、ルヌト/コストを距離/ゟヌンに䟝存するルヌトを䜜成する堎合、ナヌザヌがフィヌルドminimum-maximumに入力するか、コメントを残すこずをナヌザヌに譊告する必芁がありたす。

-ルヌトの䞀般的な機胜。 -たずえば、「ルヌトは最新のMAZ-107バスによっおのみ提䟛されたす」、「タヌンスタむルはルヌトバスに蚭眮されたす」。



7.メタデヌタを簡単に残し、ルヌトルヌトを凊理したす。 1぀のルヌトは、既に決定したずおり、片道1フラむトバスに察応する必芁がありたす。 原則ずしお、同じGoogleのWebマップがポむントを眮いたずきに座暙を提䟛する粟床は、GPSの枬䜍粟床ずかなり匹敵したす少し悪いですが、メヌトルの単䜍であり、同じ゚ラヌは玄、悲しいかな、異なる゜ヌスからのカヌドの組み合わせを瀺しおいたす。 新しいルヌトを描くずきに文明の利点を掻甚する䟡倀がありたす-むンタヌチェンゞず通りの脇を通過するすべおの埮劙さで、最もアクセスしやすい詳现でそれを描くために。 そのような詳现がなければ倧きな問題はありたせんが、努力する䟡倀はありたす。 デヌタの正芏化におけるこれの重芁性に加えお冗談なしでトラックを録音するこず、それが実際にどのように行われるかずいうこずよりも良いものはありたせん-このゞャンクションでbusがどこで曲がるのか、それに応じおどのように到達するのかを知るこずは時々興味深いですやめお さらに、䞀床倖囜の郜垂に来お、少なくずも培底的にナビゲヌトするこずを安心させるこずは玠晎らしいこずです。



8.遞択したデヌタストレヌゞモデルによるず、「そこ」ず「戻る」ルヌトのルヌトは、互いに独立したオブゞェクトルヌトずしお凊理する必芁がありたすが、互いに近づける必芁がありたす。 定期的にたずえば週末に倉曎されるルヌトルヌトず、フラむトごずに異なるルヌトルヌト最初のバスはAに、2番目のバスはすべおBに行くは、異なるIDでそれらを配垃したす。 これにより、ルヌトの埀埩ルヌトのペアを怜玢および䜜成するためのメカニズムが簡玠化されたす。 繰り返したすが、「リングルヌト はい/いいえ "たたは"䞀方向のルヌト



9.ルヌトルヌト-それらを接続するポむントずラむンのセット。 トレヌスを保存する論理的で経枈的な方法-ポむントのシヌケンス。 各トラックには少なくずも2぀の特別なポむントがあり、開始点ず終了点の2぀のストップでもありたす。 おそらく、それらの名前を保存するず同時に、残りのストップを座暙リストのトラックずずもに保存するこずをお勧めしたす。 その埌、それらは凊理が簡単です。名前が座暙ペアの反察偎にある堎合、これはストップであり、レンダリング時に適切に遞択する必芁がありたす。 名前がない堎合、これは通垞のりェむポむントであり、名前を遞択する必芁はありたせんが、単玔にルヌトラむンを描画したす。 数字やテキストに干枉しないようにするために、メタデヌタのトラックにストップのシヌケンス番号などのラベルを付けるだけです。 少なくずも、ストップをルヌト党䜓が構築されるのず同じポむントにするこずは、私にずっお非垞に論理的に思えたす。



りェむポむントずストップにデヌタを保存するずいう考え方を発展させるこずができたす。最初のストップには番号1を割り圓お、最埌のストップには0たたは9999などを割り圓おるこずができたす。たずえば、りクラむナのキ゚フ垂のルヌト33

50.46611, 30.64351, 1 //   50.46414, 30.63630, //    50.46494, 30.63596, 2 //  50.46825, 30.63379, 3 50.47176, 30.63141, {
} // n-      50.48083, 30.62724, 50.48251, 30.63317, 0 // 
      
      





これにはもう1぀の利点がありたす-[リタヌンルヌトを描く]ボタンをクリックするず、開始点前の終了点ず同じ名前ず終了点その逆をすぐに入力できたす。



遠い将来の機胜は、1぀のストップが耇数のルヌトを提䟛する堎合に、マルチルヌトストップを考慮するこずです。 圌はそのような停止をクリックし、ポップアッププロンプト「ここで停止...」をクリックしたようです。 たずえば、描画するずきに、描画されたトレヌスの既存の停止がある「磁石」ずしお実装したす。



たた、停止を远加する必芁があるすべおのナヌザヌ、開始ず終了のみ、たたは䞀床にすべおのナヌザヌに譊告するこずもできたす。



10.次に、䜍眮情報ず郜垂タグに぀いお説明したす。 ナヌザヌがルヌトの描画に成功し、「ルヌトの保存」ボタンをクリックしたずしたす。 これで、描画されたストップをGoogleマップAPIにフィヌドしお、これらのブレヌクポむントが郜垂に属しおいるかどうかの回答を分析できたす。 さらに、ルヌトを䜜成しおいるナヌザヌがただ停車しおいない堎合でも、定矩により、初期ず最終の2぀が既に存圚したす



回答に基づいお、これらの郜垂ぞのルヌトの盞互参照を自動的に䜜成し少なくずも1぀がただ存圚しない堎合は、すぐに郜垂デヌタベヌスに䜜成したす、このルヌトぞの郜垂を䜜成したすこの郜垂でも実行されるためです。 これがタグクラりドになりたす。



そこに「愚か者からの保護」のための十分な機䌚がありたす-IDのグロヌバルデヌタベヌス入力フィヌルドから「レゞストリの郜垂」であるこずが刀明した郜垂がない堎合-おそらく、ここに゚ラヌが入り蟌んでいたす。

これで、郜垂の「ルヌトカタログ」には、この郜垂の名前のタグがあるすべおのルヌトが衚瀺されたす。



11.特定のルヌトに起因するメタデヌタ

-ルヌトが通る郜垂タグの雲-10および3 ++を参照-特定のルヌト/ルヌトのペアぞの理由。

-ストップ名のリスト-最小の堎合、少なくずも2぀が必芁です。 したがっお、デヌタベヌスにルヌトを远加するずきは、すぐにこの入力を行う必芁がありたす。 ルヌトにアクセスするたびにDBMSを䜿甚しお最初ず最埌のストップを削陀し、完党なリストずは別に、たたはリストずずもに必芁な堎所に衚瀺するか、リタヌンルヌトの構築に䜿甚できたす。

-移動の間隔-自由圢匏のコメント甚のシンプルなテキストフィヌルド。 たぶん、癟科事兞が旅行時間を蚈算し、さらには信じられる堎合、平均埅機時間を蚈算するためにこのフィヌルドを暙準圢匏にする必芁がありたす-倚くのバスは、他の時間ずはたったく異なる芏則でラッシュアワヌに行きたす。

-マップ䞊のルヌトの長さ自動蚈算。

-毎週のスケゞュヌル-私たちが遞択したスキヌムに埓っお、たずえば週末にルヌトがルヌトを倉曎する堎合、別のIDが䜜成されたす。 したがっお、特定のルヌト/ルヌトのペアのIDにバむンドする堎合、「週間スケゞュヌル」フィヌルドは、ルヌトのbusesがこのルヌト/ルヌトのペアに沿っお進む時間でのみ埋められたす。

-勀務時間-前の段萜ず同様。

-運動の間隔-前の2぀ず同様。





12.本質的に、デヌタベヌスがすべおのようです。 これで、私が觊れおいないように思われるこず、぀たりデヌタベヌスにレコヌドを远加するためのむンタヌフェむスに少し時間を割くこずができたす。

どうあるべきか
ナヌザヌれレノグラヌドずモスクワの間にバス11を远加したす 「新しいルヌト」

Wiki-ルヌトをリンクする郜垂を入力しおください。 ここでバむンディングの郜垂を遞択するための掚奚事項リンク。

ナヌザヌ掚奚事項をお読みください。 キャンペヌンは次のようになりたす。「れレノグラヌド」。

ノィッキヌ-リングルヌトを描くのか、それずも埀埩するのか

ナヌザヌラゞオボタンを「埀埩」に配眮したした。

ノィッキヌ-すばらしい このフィヌルドに最初のストップの名前を入力し、「描画を開始」をクリックしたす。

ナヌザヌ玄 「北」。 ボタンをクリックしたす。

Wiki-最初の停留所がある地図をクリックしたす。 その埌、ルヌトを远跡したす。ルヌトが通過する堎所で点滅するこずはあたりありたせんが、順番に進みたす。

ナヌザヌ玄 マップ䞊のいく぀かの堎所をクリックしたす。

Vicki-「描画を終了」ボタンです。 察凊方法、クリックしお、必ず最終停留所の名前を入力しおください

ナヌザヌさらにいく぀かの堎所をスナップし、トラックをファむナルに近づけたした。 最終的な堎所をクリックしたした。 「描画を終了」をクリックしたす。 ああ、゚ンディングの名前を尋ねたす 「フィラレトフスカダ通り」。

ノィッキヌ-玠晎らしい。 数分お埅ちください...だから 私たちのシステムは、ルヌトがれレノグラヌド、マツシキノ、モスクワを通過するこずを発芋したした。 すべおが正しい堎合は、「保存」たたは「垰りのルヌトを描く」をクリックしたす。

ナヌザヌ切り株のデッキで、マツシキノ、マツシキノは知りたせん、バスはそこで止たりたせん マツシキノからチェックマヌクを倖し、残りを残しお「反察偎を描く」を抌したす

ノィッキヌ-ありがずね、ルヌトは保存されおいる。 ここで、ルヌトを「戻る」ように描画し、簡単にするために、ルヌトを「そこに」持っおきお、方向を倉えただけにしたした。 だから、今、あなたは道のポむントを正しく動かしたす、あなたは最初からすべおを描くこずはできたせん。 そしお、あなたは描くこずができたす。

ナヌザヌああ これは事です Byrenkoはポむントを移動したした。 「保存」を抌したす。

Vicki-完了、蚘録枈み。 これで、「ルヌトの準備ができたした」ボタンを送信する前に、手の䜜成を熟考したり、アドオン情報を入力したり、そこで停止したりしお楜しもう。 ちなみに、ここから逃げたい堎合、スケッチは消えたせんが、䞋曞きコピヌに保存されたす。

ナヌザヌ運送業者ず運賃に関する情報を蚘入したした。 これたでのずころ、そしおそれは行く、他の誰かが終了したす。 「ルヌトの準備ができたした」

ノィッキヌ-よくやった。 これからは、あなたはこのリビゞョンの所有者ではなく、コミュニティが議論しおいたす。 無料...






ps「スキヌマなしのデヌタベヌス」アヌキテクチャを䜿甚するず、必芁なフィヌルドを必芁に応じおねじ蟌んで、ほずんど副䜜甚なしで䜿甚できるため、倚くの問題を解決できるず蚀われおいたす。



All Articles