需求背景 目前主流的博客系統(tǒng),、CMS都會(huì)有一個(gè)TAG標(biāo)簽系統(tǒng),,不僅可以讓內(nèi)容鏈接的結(jié)構(gòu)化增強(qiáng),而且可以讓文章根據(jù)Tag來(lái)區(qū)分,。相比傳統(tǒng)老式的Keyword模式,這種Tag模式可以單獨(dú)的設(shè)計(jì)一個(gè)Map的映射表來(lái)增加系統(tǒng)的負(fù)載和查詢的效率,。 數(shù)據(jù)庫(kù)設(shè)計(jì)方案1 此方案分為2個(gè)表: 1.Tag表 Tag表表結(jié)構(gòu): 復(fù)制代碼 代碼如下: tagid # tag標(biāo)簽的ID tagname #tag內(nèi)容 num #當(dāng)前Tag的引用個(gè)數(shù) 文章表結(jié)構(gòu): 復(fù)制代碼 代碼如下: ID #文章ID title #文章標(biāo)題 tags #tags列表,,多個(gè)以,分割 tagid #tags的ID 多個(gè)以,分割 ... 此種方式Tag標(biāo)簽主要內(nèi)容保存在 文章表 中,對(duì)于Tag表的壓力較小,,只是添加的時(shí)候更新一下Tag的引用數(shù)量,,但是查詢的時(shí)候效率不足,不是好辦法 數(shù)據(jù)庫(kù)設(shè)計(jì)方案2 第二種方案使用2個(gè)Tag表,,其中一個(gè)保存Tag信息,,另一個(gè)保存映射信息: Tag表: 復(fù)制代碼 代碼如下: tagid # tag標(biāo)簽的ID tagname #tag內(nèi)容 num #當(dāng)前Tag的引用個(gè)數(shù) Tagmap表 復(fù)制代碼 代碼如下: tagid aid 文章表 復(fù)制代碼 代碼如下: ID #文章ID title #文章標(biāo)題 tags #tags列表,多個(gè)以,分割 ... 這種形式,,每次發(fā)布內(nèi)容和修改內(nèi)容的時(shí)候 都去更新一下Tag表和 Tagmap表,。 查詢的時(shí)候需要從Tagmap表中查找響應(yīng)的文章ID,然后使用文章ID去查詢具體的文章信息,,因?yàn)槊看尾樵兌际鞘褂盟饕?,所以效率較高,。 數(shù)據(jù)庫(kù)設(shè)計(jì)方案3 前兩種方案都是使用純粹的Mysql來(lái)設(shè)計(jì)的,第三種方案將使用Nosql的魅力來(lái)設(shè)計(jì),。 基本結(jié)構(gòu)同方案2,,只是在Tag表和Tagmap表中使用mongo/redis這樣的nosql數(shù)據(jù)庫(kù)服務(wù)器,這樣可以發(fā)揮nosql數(shù)據(jù)庫(kù)強(qiáng)大的線性查詢能力,。 1) 第一種方式的表結(jié)構(gòu)設(shè)計(jì)與方案2完全相同,,只是數(shù)據(jù)庫(kù)服務(wù)器換了。 2)其他的方案,,當(dāng)然是發(fā)揮Nosql的線性能力來(lái)設(shè)計(jì)存儲(chǔ)的Key了,,尤其是使用redis的時(shí)候,使用的Key的結(jié)構(gòu)可以完美的提高查詢效率 |
|
來(lái)自: instl > 《database》