我的标签表结构设计还有查询。的确是存在一些问题。当初我敢说。TAG的想法刚被流传的时候。我就开始注意到这个功能了。所以在国内主流的PHP开发的BLOG程序中,是第一个支持此功能的。以前有人和我说过。现在又有高手提起。我的标签的确存在着两个问题。感谢yake.chen@dudu-inc.com。
Tag功能的表结构设计存在一定问题。目前是通过模糊搜索查询方式来匹配标签,进而通过标签来匹配到文章。这个实现方式有两个致命的缺点:
- 大数据量下标签搜索的效率问题。
- 标签匹配的准确性问题。(所记录的标签出现条数并非模糊搜索显示出的条数)
的确。本来刚有人和我提出的时候,我就把改善TAG表列入计划中。可是后来忘记了。结果这次发布的测试版后。高手又提出了这个问题。才让我想起来。的确要改善。
|
因为标签是个 多对多的结构体系 一篇文章可以有多个标签,一个标签可以对应多篇文章。所以一般性的解决办法是为标签结构使用两个表来描述。 你现在的标签表算一个,另外一个记录标签和文章标签的关系。 比如建立一个表tag_relation 三个字段 tid, article_id, tagid每插入数据库一个标签的时候同时更新这两个表。tag_replation的tagid字段对应你的tags表的tagid,tag_relation 表的tid是个自增的主键记录每次入库的tag。article_id是此tag对应的文章id,这个表记录的基本只是数字型的ID值所以存储空间消耗不大且实现了高效精确匹配的问题。 |
我自己也想了想关于标签的表结构的问题。如果不用另外一个表记录关联字段,而是用tag表的一个字段来保存一个关联ID,也是一个比较好的办法吧??比如:
| Field | tagid | tag | usetime | aids |
| Value | 1 | angel | 5 | 1,3,4,8,5 |
这样的话,我必定要先从URL获取name,也就是:
http://www.4ngel.net/blog/angel/?action=tag&item=angel
select aids from tags where tag='angel' 1 query
然后再来
select * from articles where articleid in (aids) 2 queries
这样效率问题也解决了。准确性也解决了。不知道大家还有没有其他的看法。如果使用另外一个表来放关联字段。那不是还要来一次LEFT JOIN?
希望各位多多交流技术。
