我明白你为什么要问这个有趣的问题。如果测试人员输入关键字列表,而您使用信息模式视图获取匹配列的列表,则存在大量错误匹配的危险,这可能会浪费时间或导致测试人员输入错误信息进入你的系统。您想知道如何确定哪些列与测试人员的查询最匹配。但是你想保持简单,因为这只是一个临时的解决方法,它不是你的主要应用程序。
答案是使用基于信誉的系统来补充搜索结果。这是一个非常简单的,应该适用于您的应用程序。
首先,创建两个简单的表来存储数据库中表和列的评级信息。这是起始结构。
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 Rating System来补充您的排名,因为它简单、易于实施并且效果很好。
当用户输入关键字列表时,不要使用信息架构视图。相反,在 TEST_SEARCH_COLUMNS 表中搜索具有这些关键字的任何列。根据点击数为每列分配一个 WEIGHT。(例如,如果搜索是“customer,amount,income”,则 CUSTOMER_ID 列的权重为 1。CUSTOMER_INCOME 列的权重为 2,CUSTOMER_INCOME_AMOUNT 的权重为 3。)计算 WEIGHT每个表作为其列的权重之和。
现在,对于搜索返回的每个表和列,将 WEIGHT 乘以 RATING 以确定搜索值。给测试者一个按搜索值降序排列的匹配表列表。在每个表中,还按搜索值的降序列出列。
每次在搜索中出现表格或列时,使用 Elo 评级系统使其与评级为 1000.0 的对手获胜。每次用户选择要使用的列时,都要让该列和它的表格战胜一个评分为 1500.0 的对手。通过这种方式,最有用和最成功的表格和列将随着时间的推移自然地浮到搜索列表的顶部。
这种方法的一个附带好处(使用表而不是信息模式视图)是这种方法更具可扩展性。作为一项增强功能,您可以将DESCRIPTION 和COMMENTS 列放在TEST_SEARCH_TABLES 和TEST_SEARCH_COLUMNS 表上,并且还可以在这些列中搜索关键字匹配项。
这是另一个可选的增强功能 - 您可以在每个表和列旁边放置一个 (+) 和 (-) 按钮,如果用户单击 (+),则它可以战胜 2000 评分的对手,而输给零评分的对手如果用户单击 (-),则为对手。这将允许您的测试人员投票支持他们认为重要的列,并投票反对总是妨碍您的列。