第一个想法归纳如下
表1:news
-----------------
id detail keywords
表2:tags
-----------------
id tag
表3:news_tag
-----------------
tag_id news_id
其实看了表结构就知道是怎么回事了,但是还是说明一下
表1是新闻表,keywords用在提取某条新闻的标签时不需要查其它表,所以这里需要用分隔符把各标签分隔开,提取的时候分开就行了。
表2是存储每个标签的。
表3存储新闻和标签的对应关系,很明显,插入一条新闻可能会插入多条对应关系,如
6:75
8:75
13:75
这样,需要提取某条新闻有哪些标签只需要
SELECT keywords FROM news WHERE id = 新闻ID;
提取某个标签有哪些新闻只需要
SELECT news_id FROM tag_news WHERE tag_id = 标签ID;
问题是:这种方式效率可能很成问题,要查询几个表,插入新的标签的时候也需要判断这个标签存不存在,并且要维护三个表,大家能给点建议吗?
2013年2月6日: 又看到这个问题,关心的人好像不多啊,不知道红薯怎么解决的。最后的问题我想可不可以不给每个标签分ID,直接用标签记录,表结构变成下面这样:
表1不变,表2:news_tag
---------------------
news_id tag
某条新闻有哪些标签,直接用表1查,
SELECT keywords FROM news WHERE id = 新闻ID;
如果要查询某个标签有哪些新闻,
SELECT news_id FROM news_tag WHERE tag_id = 标签名称;
但是这样又有字符类型的查询效率问题,并且同样要同时维护两个表,要是能用PGsql的json功能就好了,就能直接查询了