我有两个表:SQL服务器 - 关键字的选择列表和代名词
关键词
在哪里存储唯一的关键字。
CREATE TABLE [dbo].[Keywords]
[KeywordID] [int] IDENTITY(1,1) NOT NULL,
[Description] [varchar](200) NOT NULL
select * from Keywords
1 MVC
2 HTML
3 C#
4 ASP.NET MVC
5 MVC3
KeywordSynonymous
,我指出某些关键字是同义他人。
CREATE TABLE [dbo].[KeywordSynonymous]
[KeywordID] [int] NOT NULL,
[KeywordSynonymousID] [int] NOT NULL
这两个字段都是关键字表的FK,这两个组合字段在此表上都用作PK。
在这里,我想说'MVC'和'MVC3'是同义词,也许'MVC3'和'ASP.NET MVC'也是同义词。
select * from KeywordSynonymous
1 5
5 4
CONCEPTS
1)
如果关键字 'MVC' 是同义 'MVC3' 的
和 'MVC3' 是同义的 'ASP.NET MVC'
然后在概念上MVC是ALSO代名词 'ASP.NET MVC'
2)
如果关键字 'MVC' 的代名词 'MVC3'
那么它也是真实的反之亦然和那'MVC3是'MVC'的同义词
问题
在我的网站想象我在做一个搜索,并且用户可以输入任何东西,但是对于我们的例子,他可以键入“MVC”或“MVC3” ......
我怎么能用一条SQL语句获得所有可能的同义词,确保符合概念1和2?
意思是说:
>> if the user types 'MVC', my sql should return 'MVC, MVC3', 'ASP.NET MVC'.
>> if the user types 'MVC3', my sql should return 'MVC, MVC3', 'ASP.NET MVC'.
>> if the user types 'ASP.NETMVC', my sql should return 'MVC, MVC3', 'ASP.NET MVC'.
=================================== =============================
UPDATE
我觉得我必须补充一点关于我的网站发展。这是一个市场,年轻的专业人士可以通过新的方式推销自己的服务。
由于我们想要允许任何职业,我现在无法预见什么“关键字”会定义更好的每个职业。所以我会允许用户定义这些关键字。
我的问题是我需要允许UserX通过专业和关键字搜索这些年轻的专业人士。我需要允许这些用户将其搜索到的关键字与现有关键字进行匹配,以便当前和未来的搜索将自动匹配正确的配置文件。
这就是为什么我没有预先提供所有关键字,并且肯定无法识别未来的关键字及其各自的同义词。我也不能指望用户将所有现有的关键字匹配到所有相关的关键字...所以这就是为什么我需要Concept 1工作。
============================================= ===================
计算器TAGS
关键字的模块应该工作非常类似于StackOverflow的标签(关键词),其中,如果我设置的标签是SQL ,你们正在搜索TSQL或SQL SERVER ......也应该看到这篇文章。
:-)
你可能会更好过存储'KeywordSynonymous'所有组合了前面,而不是穿越的路径每个'select' – 2011-04-14 20:33:41
你必须去自制?任何不使用同义词词典的全文索引的理由?这里是MS的架构答案:http://msdn.microsoft.com/en-us/library/ms142541.aspx – 2011-04-14 20:49:32
@Martin >>这个表格将由网站的用户填充。他们会在需要的基础上添加关键字(几乎我们不限制进入的内容)。目前,管理员将每隔XX周管理同义词条......但我们正在考虑将此功能给予用户自己,他们将在这里“暗示”管理员2个关键字是同义词。管理员不会知道所有可能的匹配...这就是为什么您提出的解决方案是不可能的。 – 2011-04-15 02:38:16