您既可以爲技能使用普通的標準化標記表並使用SQL,也可以將技能作爲單個列表存儲並在單列上使用FREETEXT搜索。
user : id; name
skill : id; language_name
user_skill : user_id; skill_id
你遇到一個新的技能每一次,剛剛創建的技能爲它的新條目,所以「淨」,‘DOTNET的’,‘C#.net’將出現3次。
當搜索爲「爪哇JavaScript的HTML教程」,打破成清單4的最佳匹配,所以查詢看起來像這樣
select top 10 u.name, count(*) matched
from skill s
inner join user_skill us on s.skill_id = us.skill_id
inner join user u on u.user_id = us.user_id
where s.language_name in ('java','javascript','html','css')
group by u.name
order by matched desc
(顯示前10個)
在SQL Server 2005在FOR XML的幫助下,還可以獲得最佳10個匹配用戶中每一個的缺失技能列表
select top(10)
u.id,
u.name,
count(*) matched,
stuff(
(
select ',' + s.language_name
from skill s
where s.language_name in ('java','javascript','html','css')
and not exists (
select * from user_skill u2
where u2.user_id=u.id
and u2.skill_id=s.skill_id)
for xml path('')
),1,1,'') as missing_list
from skill s
inner join user_skill us on s.skill_id = us.skill_id
inner join [user] u on u.user_id = us.user_id
where s.language_name in ('java','javascript','html','css')
group by u.id, u.name
order by matched desc
最佳人員與技術技能和t他最接近技能搜索的人嗎?我沒有看到你的數據庫中有任何能力的判斷,所以如果兩個人都擁有Java,那麼他們在兩個類別中都會被並列第一。 – Michael 2011-01-25 06:05:26