zblogphp
zblogphp copied to clipboard
分类及Tag数据库设计修改
为提升分类及Tag相关效率,现提出一种新的数据库设计方案。
现有方案是zbp_post
内含log_CateID
和log_Tag
两个字段,故只能支持单分类,Tag检索效率也极其低下。在这里提出一种新的解决方案,可完美解决多分类及Tag索引问题。同时也对各库内meta
进行修改,解决meta查询问题。
解决方案
分类及Tags
- 建立新表:
zbp_post_relationship
,内含字段pr_postid
,pr_cateid
,pr_tagid
。 - 每次文章更新时,多条Insert写入,如:
INSERT INTO `zbp_post_relationship` (pr_postid, pr_cateid, pr_tagid) VALUES (1, 2, 0);
INSERT INTO `zbp_post_relationship` (pr_postid, pr_cateid, pr_tagid) VALUES (1, 3, 0);
INSERT INTO `zbp_post_relationship` (pr_postid, pr_cateid, pr_tagid) VALUES (1, 0, 2);
INSERT INTO `zbp_post_relationship` (pr_postid, pr_cateid, pr_tagid) VALUES (1, 0, 3);
- 查询时:
SELECT * FROM zbp_post_relationship WHERE (pr_tagid = 3);
即可查询出此Tag下所有文章。分类同理。
Meta
- 建立新表:
zbp_meta
,内含字段meta_type
,meta_pointid
,meta_name
,meta_value
。 - 写入Meta:
INSERT INTO `zbp_meta` `meta_type`, `meta_pointid`, `meta_name`, `meta_value` VALUES ('post', 1, 'foo', 'bar')
- 查询同上
兼容性问题
- 需要废弃
log_CateId
和log_Tag
字段。 -
$post->Category
需要改为$post->Categories
($post->Category
指向Categories[0]
)
关系表,最少还有一个“type”类别字段,用于区别category,tags,meta等不同的用途
pr_postid, pr_cateid, pr_tagid,是错误的,应该是id,postid,relationid,type,key,value这几个字段!
@rainbowsoft 都TM过去了四年了
现在 6 年了。。
现在7年了。。