あなたがこの興味深い質問をしている理由がわかります。テスターがキーワードのリストを入力し、情報スキーマ ビューを使用して一致する列のリストを取得すると、多くの誤った一致が発生して時間が無駄になったり、テスターが誤った情報を入力したりする危険性があります。あなたのシステムに。テスターのクエリに最適な列を特定する方法を知りたいと考えています。ただし、これは一時的な回避策にすぎず、メインのアプリケーションではないため、シンプルに保ちたいと考えています。
その答えは、評判ベースのシステムを使用して検索結果を補完することです。これは、アプリケーションに適した非常に単純なものです。
まず、データベース内のテーブルと列の評価情報を格納する 2 つの単純なテーブルを作成します。これが最初の構造です。
TEST_SEARCH_TABLES:
TABLE_ID
TABLE_NAME
RATING
TEST_SEARCH_COLUMNS:
COLUMN_ID
TABLE_ID
COLUMN_NAME
RATING
データベース内のすべてのテーブルの名前を TEST_SEARCH_TABLES に入力します。TEST_SEARCH_COLUMNS にすべての列の名前を入力し、対応するテーブルにリンクします。すべての RATING 列を 1000.0 に初期化します。Elo 評価システムを使用してランキングを補完します。これはシンプルで実装が簡単で、うまく機能するためです。
ユーザーがキーワードのリストを入力するときは、情報スキーマ ビューを使用しないでください。代わりに、TEST_SEARCH_COLUMNS テーブルを検索して、これらのキーワードのいずれかを持つ列を探します。ヒット数に基づいて各列に WEIGHT を割り当てます。(たとえば、検索が「customer,amount,income」の場合、列 CUSTOMER_ID の重みは 1 になります。列 CUSTOMER_INCOME の重みは 2 になり、CUSTOMER_INCOME_AMOUNT の重みは 3 になります。)各テーブルは、その列の重みの合計として表されます。
検索で返された各テーブルと列について、WEIGHT に RATING を掛けて、検索値を決定します。検索値の降順で一致するテーブルのリストをテスターに渡します。各テーブル内で、検索値の降順で列もリストします。
表または列が検索に表示されるたびに、Elo レーティング システムを使用して、レーティング 1000.0 の対戦相手に対して勝利を与えます。ユーザーが操作する列を選択するたびに、その列とそのテーブルの両方に、レーティング 1500.0 の相手に対して勝利を与えます。このようにして、最も有用で成功したテーブルと列が、時間の経過とともに有機的に検索リストの上位に表示されます。
このアプローチ (情報スキーマ ビューの代わりにテーブルを使用する) の副次的な利点は、このアプローチがより拡張可能であることです。拡張機能として、DESCRIPTION 列と COMMENTS 列を TEST_SEARCH_TABLES および TEST_SEARCH_COLUMNS テーブルに配置し、これらの列でキーワードの一致も検索できます。
別のオプションの拡張機能を次に示します。各テーブルと列の横に (+) と (-) ボタンを配置し、ユーザーが (+) をクリックするとレーティング 2000 の対戦相手に対して勝利し、レーティング 0 の対戦相手に対して敗北を与えることができます。ユーザーが (-) をクリックすると対戦相手。これにより、テスターは重要な列に投票し、常に邪魔になる列に反対票を投じることができます。