自由床ずしおのデヌタの掘り䞋げ

芪愛なる読者ぞの挚拶。
この資料は、私が長幎にわたっお取り組んできたRDBMSを䜿甚するこずの利䟿性の問題を明らかにしたすが、䌝える時間はありたせんでした。

デヌタの怜玢、衚瀺、分析を行っおいない堎合、たたは行っおいる堎合でも、完党に䟿利で䜕も必芁ない堎合は、このテキストを読むのをやめおください。

発行


したがっお、あなたはDBMSを読み蟌む暩利を持぀ナヌザヌです。 おそらく兞型的なサブタスクのセットがあるでしょう



最埌に、これらの問題を定期的に解決する必芁がある可胜性が非垞に高くなりたす。

デヌタ凊理ツヌルの垂堎には、ク゚リ、キュヌブ、およびレポヌトの䜜成専甚のツヌルが倧量にありたす。 残念ですが、それらのほずんどは、ナヌザヌが䞊蚘のタスクを完党に持っおいるのを芋たせん。 䞀般的な問題を前のリストず逆の順序でリストしたす。


これらはすべお、構造に関するドキュメントの欠劂を背景にしおいたす。 ツヌルの倖偎にあるずいう事実にもかかわらず、問題はツヌルに盎接関係したす。

これらの問題の珟実が䜕であるかが明確でない堎合は、私がどのように問題を解決しようずしおいるのかを孊ぶこずでこれを理解しおくれるこずを願っおいたす あなたの意芋では、これらの問題が遠慮がちである堎合、さらに読み進めなければ、私たちにずっおより簡単になりたす。

解決策


プログラム「サンプリングの自由」で特定された問題に察する包括的な解決策は、同時にいく぀かの方向で実行されたす。 このセクションのテキストでは、適甚される抂念ず実装のニュアンスに぀いお詳しく説明しおいたす。

明確で䟿利なデヌタ構造


最も単玔なデヌタベヌスにのみ、倱われるこずのできない゚ンティティが含たれおいたす。 よく開発されたアプリケヌション領域では、テヌブルずフィヌルドはそれぞれ数十ず数癟で枬定されたす。ストレヌゞに぀いお蚀えば、これらは数癟ず数千です。 さらに、開発者たたはアナリストは、倚くの堎合、各サブゞェクト゚リアに察しお耇数の接続テスト、生産的、アヌカむブを持っおいたすが、これも原則ずしお非垞に倚くの接続です。

必芁なものを完党に䞍芁なものず区別するこずは、ツヌルによっお解決される最初のタスクの1぀です。

デヌタベヌスずテヌブル


遞択したアクセス「゚ンゞン」内で、接続を䜜成および蚘憶できたすが、これは暙準です。

テヌブルの完党なリストで、サブストリングごずに関心のあるフィヌルドを芋぀けるこずができたす。次に䟋を瀺したす。

コンテキスト


゚ンティティ/テヌブルコンテキストは、Business Objectsナニバヌスに近い抂念ですが、より広い抂念です。 ナヌザヌは、遞択したテヌブルに関係のないテヌブルには興味がないず考えるのが自然です。 コンテキストに盎接関連するテヌブルのみがコンテキストに含たれおいるず考えるのは間違いです。したがっお、コンテキストでは、任意のレベルのネストを確認できたす。



ノヌドぱンティティであり、リヌフはフィヌルドです。 関連する゚ンティティは、関係を持぀゚ンティティのフィヌルドの暪に衚瀺されたす。 同じ゚ンティティぞの耇数の接続は、リンクが瀺されるフィヌルドによっお区別されたす。



デフォルトでは、フィヌルドによっお参照される゚ンティティのみが衚瀺されたすが、反察偎からの関係も確認できたす。



この操䜜は、テヌブルごずに1回だけ実行されるか、すべおのテヌブルのモヌドが自動的にオンになりたす。


認識


システム蚭蚈者がすべおの倖郚キヌを提䟛し、それらをスキヌムに登録しおおけば、接続は自動的に決定され、これをほずんど気にする必芁はありたせん。 私はそのようなデヌタベヌスを芋るのが倧奜きです。 䞊蚘のスクリヌンショットの䟋は、そのうちの1぀で䜜成されおいたす。プロゞェクトの1぀の先生に感謝したす。

アヌキテクトがこれを予芋しなかった堎合だけでなく、アクセスコンポヌネントのサブドラむバヌがこの情報の取埗をサポヌトしおいない堎合も幞運ではありたせん。 この状況はADOおよびODBCで頻繁に発生したすが、これらの゚ンゞンだけがツヌルで䜿甚できるわけではありたせん。

定矩


䜕らかの理由で、接続のデヌタを回線から取埗できないずいう事実にただ盎面しおいるずしたす。 しかし、それらは毎回䜿うのにずおも䟿利です。

それらを自分で決定するこずができたす。 これを行うにはいく぀かの方法がありたす。

最も簡単なのは、コンテキストメニュヌずダむアログを䜿甚した1぀のフィヌルドの1回限りの束です堎合によっおは、互いの䞊にドラッグアンドドロップフィヌルドを介しお行うこずができたす。



より耇雑なのは、いく぀かのフィヌルドの集たりです



最埌に、曲技飛行は、必芁なすべおのテヌブルの耇数の兞型的な接続です。



私は最埌のタスクを実行し、人気のあるオヌプン゜ヌスポヌタルのスキヌムを分析しなければなりたせんでした。そこでは、各ルックアップテヌブルぞの数十の明らかなリンクがあり、リンクの数は同じ順番になりたす。

これらの接続はすべお、ロヌカルの「スキヌム」に保存され、ドラむバヌを介しおデヌタベヌスぞの自動認識リンクぞの远加ずしお存圚し、それらずずもにコンテキストを決定し続けたす。

その他の機胜


特定の堎合には、コンテキストをより柔軟にする個別の利点がありたす。 コンテキストメニュヌのスナップショットだけを詳しく説明したす。

でも、これは䜕のためですか


ナヌザヌが操䜜する゚ンティティのコンテキストの定矩ず衚瀺は、リンクにネストされた必芁なデヌタの遞択に集䞭できるようにするだけでなく、行われたす。 ク゚リビルダヌは接続フィヌルドを考慮し、リンクの性質はナヌザヌに透過的であるため、ナヌザヌはそれらをリンクするこずを考えたせん。

リク゚ストを䜜成する䟿利さ


䟿利な䜜業の最初の䞀歩を螏み出したした-重芁なものを二次的なものから分離したした。 今、私たちの仕事は、手頃な䟡栌から必須の遞択を簡玠化するこずです。

倖出先で


私たちのタスクは、コンテキストを目的の深さたで開き、必芁なフィヌルドを遞択するこずです。 テヌブルはそれらに移動するための単なる方法であり、それらを指定するこずはたったく必芁ありたせん。 ク゚リ内のフィヌルドを䜿甚した䞀般的な操䜜は、遞択範囲ぞの远加、フィルタヌぞの远加、および匏ぞの远加遞択範囲たたはフィルタヌ内です。

䞀般的なアクションの3぀のボタンアむコンが図で匷調衚瀺され、そのうちの1぀の結果フィルタヌに远加が、Serviceテヌブルによっお参照されるServiceSubGroupテヌブルのNameフィヌルドの䟋に瀺されおいたす。



ツヌルでテヌブルを遞択するず、遞択にすべおのフィヌルドを自動的に远加するこずができたす。 ただし、結果に䜙分なゎミは必芁ないので、いく぀かのフィヌルド図では同じServiceテヌブルを削陀する必芁がありたす。



...そしお、コンテキストの深さからフィヌルドを远加したすドラッグアンドドロップで行いたす



...グルヌプの最倧フィヌルド倀ず行数を芋぀けたす。



...次に、フィヌルドを再グルヌプ化したす。



...リク゚ストを行いたすフィルタの远加定矩は省略されたす。詳现に぀いおは埌述



...サンプルから1぀のフィヌルドを䞀時的に削陀し、別のフィヌルドをグルヌプ解陀したす。



...新しいリク゚ストを䜜成し、より興味深い結果を確認したす。



これだけでなく、さらに倚くのこずができるようになりたした。今では、最小限のクリックで枈みたす。

オブゞェクトモデル


「Freedom of Fetch」ツヌルの最も重芁な機胜は、デヌタベヌスオブゞェクトがどこでも党䜓的に解釈されるこずです。぀たり、衚瀺、远加、削陀、非衚瀺などです。 これにより、ナヌザヌは操䜜しながらリラックスでき、機噚は倱われず、
ナヌザヌずの察話でそれらを台無しにしたす。

オブゞェクトモデルは、接続の必芁性ず十分性を明確に制埡し、芁求をグルヌプ化するフィヌルドを考慮したす。 䟋



グルヌプ内のすべおのサヌビスをサブグルヌプずサヌビス名で陀算しお、グルヌプ芁求を䜜成したす。図の䞭倮には、生成された芁求が瀺されおいたす。

次に、サブグルヌプのみでグルヌプ化したいため、サヌビスの名前を「非衚瀺」にしたす。



芁求では、䞡方の郚分遞択、グルヌプ化からショヌトネヌムが消えたした。

最埌に、遞択条件を削陀したす再び䞀時的に



リク゚ストでは、whereセクションが完党に消えただけでなく、ServiceGroupテヌブルのフィヌルドが䞍芁になったため、結合が1぀少なくなりたした。

圓然、同じ数回のクリックで、リク゚ストを逆の状態に戻すこずができたす。

匏゚ディタヌ


フィヌルドず関係だけを䜿甚しおも、ある皋床しか十分ではありたせん。 遅かれ早かれ、デヌタベヌスから盎接衚されない新しい倀を蚈算する必芁が生じたす。 私たちがすでに知っおいる快適さず手動での䜜成、さらにはデザむンの倉曎を組み合わせる方法は

解決策は非垞に簡単です。フィヌルドをオブゞェクトずしお䜿甚し続ける必芁があり、すべおのさたざたなDBMSの最も豊富な構文暙準の集蚈関数を陀くの残りはナヌザヌに任せる必芁がありたす。 ぀たり、フィヌルドではないすべおのものは、テキストで曞くこずに加えお、「正しいスタむル」でフィヌルドを参照する、たたは参照しない機䌚がありたす。

匏゚ディタヌは、匏テキスト内の䜿甚可胜なフィヌルドぞのリンクをどこにでも挿入できるように、たたは以前に指定したリンクを削陀できるように蚭蚈されおいたす。



この図では、セッションの合蚈ず操䜜の合蚈の差を䜜成し必芁に応じお0になるように、すべおを100で割ったこずがわかりたす元はコペック単䜍でした。 この匏には、ツヌルによっお管理および区別される6぀のオブゞェクトがありたす。開始ブラケット、2぀のフィヌルド、集玄関数、および2぀の終了ブラケットです。 ブラケットはマネヌゞオブゞェクトに配眮され、ペアの制埡が簡玠化されたす䞀方のブラケットを削陀するず、もう䞀方のブラケット/関数は自動的に削陀されたす。たた、フィヌルドが集蚈匏にあるかどうかを確認できたす。 他のすべおの文字 - 、 / 、1、0、0は「そのたた」サヌバヌに転送され、機噚にずっおは䜕も意味したせん。

これはあたり䟿利ではないように思われるかもしれたせん。リンクず匏の残りの郚分を曞くこずを切り替えおください。 ただし、フィヌルド内の平均文字数のタむピング速床のみを比范しおも、すでに勝っおいたす。 ここで可胜なコンテキストの深さを远加したす。 たた、このテキストの前埌で説明した操䜜の利䟿性に察する支払いずしお、この違いはたったく考慮できたせん。

遞択たたはフィルタヌで指定されたフィヌルドは、すでに次のような倉曎可胜な匏です。

最も䟿利なフィルタリング


遞択を操䜜するための優れた手段が存圚する堎合、リミッタヌを䜿甚した䜜業も同様に単玔でなければならないこずは明らかです。 私たちが自由に䜿える機䌚を考えおみたしょう。

数回クリックするだけでフィルタヌを蚭定したす


フィルタヌを操䜜するためのパネルには、最初はフィルタヌ甚の空のコンテナヌが含たれおいたす。



コンテナにフィルタヌを远加するには、いく぀かの方法がありたす。



その結果、次のようなものが埗られたすフィルタヌはスケッチされるだけですが、すべおは未定です。



フィルタヌのいずれかを遞択しおフィルタヌを远加し、そのタむプず倀を指定できたす。

予枬倀の遞択


巊偎の匏の耇雑さに関係なく、フィルタヌ凊理する可胜性のある倚くの倀をすばやく把握するこずができたす。 衚珟をもう少しキャッチヌにしお、「ガむド」が䜕を提䟛しおくれるか芋おみたしょう。



マニュアルは、この衚珟のすべおの組み合わせを慎重に提䟛したした。

ただし、これが最も単玔なケヌスでした。これは、それらが属するテヌブルフィヌルドのすべおの組み合わせが遞択されたためです。 倚くの堎合、それらが倚すぎるため、それらがサンプルに含たれるこずさえ保蚌されたせん。 このような堎合、2぀の远加遞択モヌドがありたす。



それらは、増加する順序の期間に配眮されたす。

「フィルタヌなしで予期される」ずは、遞択されたフィヌルドのテヌブルから参照される倀のみが遞択されるこずを意味したす。

「フィルタを䜿甚しお期埅」では、スヌパヌむンポヌズされたフィルタが考慮されるため、オプションがさらに絞り蟌たれたす。 圓然、珟圚のフィルタヌは砎棄されたす。

前の䟋から空のフィルタヌを削陀し、「フィルタヌが必芁です」遞択を遞択するず、次の結果が衚瀺されたす。



空のサンプルを取埗するたびに、長くお苊劎しお倀を遞択できたした。 この匏のフィルタヌは冗長であるか、「寿呜ず互換性がありたせん」。

フィルタヌのグルヌプ化、䞊べ替え、無効化


これたでに、いく぀かの単玔なフィルタヌの最も単玔なセットを調べおきたした。 ただし、このパネルでは、それらを任意の組み合わせにグルヌプ化し、「and」、「or」、および拒吊に基づいおそれらの和集合挔算を実行できたす。 これは、ドラッグアンドドロップゞェスチャずツヌルバヌボタンを䜿甚しお行われたす。 ルヌトでも、各フィルタヌを無効にできたす。 たずえば、次のような構成を䜜成できたす。

しっかりず氞遠に


か぀お䜕が行われたずしおも、少なくずも仕事に぀いお話しおいる堎合は、もう䞀床繰り返したくありたせん。 䞀床䜜成したら、どの結果に頌るこずができるかをリストしたしょう。

リンク構成の保存


ツヌルの䟿利さの基本の1぀はテヌブルコンテキストです。 手動で䜜業する必芁がある堎合は、ファむルに保存されたす。ファむルは手動で線集するこずも、別のワヌクステヌションに持ち蟌むこずもできたす。 ただし、この情報がアヌキテクトによっお芏定されおいる堎合、党員が優れおいたす。

回埩可胜なク゚リ構造


䜜成されたリク゚ストは保存しお、本栌的な「ドキュメント」ずしお転送できたす。別の時間たたは別の堎所で開くず、すべおの詳现が埩元されたす。 唯䞀の自然な制限は、デヌタベヌスぞの接続にアクセスできる必芁があり、その構造が䜿甚されるフィヌルドの粟床ず䞀臎する必芁があるずいうこずです。 コンテキスト蚭定の転送は必須ではなく、必芁なリンクのコピヌがドキュメントに登録されたす。

完了した各リク゚ストは履歎プヌルに保存されたす。


リク゚ストを完了するずすぐに、以前に実行されたリク゚ストのリストに远加されたす。 これは、フィヌルド、条件、グルヌプ化などの絞り蟌みの反埩間で結果を比范できるようにするために行われたす。 デヌタセットに加えお、ク゚リ構造がドキュメントずしお保存されたす-埩元でき、元のSQLク゚リ手動で倉曎できたす。

セッションの自動保存ず埩元


最埌に、プログラムを緊急に䞭断した堎合に備えお、ク゚リ履歎党䜓が保存され、再起動埌に完党に埩元されたす。

開発方向


このツヌルには特城的な機胜ではないため、ここでは蚀及しなかった倚くの小さなものがありたす。 さらに、これらのささいなこずの倚くは、たれにしか䜿甚されなかったり、リファクタリングの副産物によっお死んだり、死んだりしたす。

このツヌルはあたり知られおいたせんが、開発者が盎面しおいるものだけが含たれおいたす。 関心ず需芁があれば、倚くを修埩しお完了するこずができたす。

圓初、このツヌルはデスクトップずしお開発されおいたしたが、最近では単玔化されたWebむンタヌフェむスが実隓ずしお実装されたした。 デスクトップむンタヌフェむス自䜓はかなり時代遅れです。

芪愛なる読者の皆さんの反応は、このツヌルが動的な生掻を送るべきか、それずも単なる䟋瀺なのかを刀断するこずを願っおいたす
別の行き止たりの開発ブランチ。 ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J197424/


All Articles