请教下各位,就是在论坛写文章的时候会有个给文章加标签的功能,请问这个数据库应该怎样设计?

WBOY
Freigeben: 2016-08-04 09:19:14
Original
1057 人浏览过

我有想过存在文章表,用户输的标签又没办法控制的,这样的话就没办法对标签进行管理.比如现在我想要用标签做一个条件查询就不行.

回复内容:

我有想过存在文章表,用户输的标签又没办法控制的,这样的话就没办法对标签进行管理.比如现在我想要用标签做一个条件查询就不行.

建立一个标签表。标签表里面是标签ID,Name等,创建一个关联表,然后保存ArticleID,TagID,然后输入或者抓取文章的时候提取标签。先判断标签表是否存在已经获得的标签,没有就更新,然后将标签的ID存入关联表,然后加上文章的ID。到时候更新的时候,可以直接通过关联表取出,这样就可以成功显示了。

数据库的设计有三大范式,
1.是数据库中的字段是原子的,不能再进行拆分。标签貌似符合,但是标签也有标签单独的属性,如果后期要根据标签单独筛选出列表的话,不方便。

CREATE TABLE `user_label` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '类型',
  `lable_name` varchar(255) NOT NULL COMMENT '标签名称',
  `user_id` int(11) NOT NULL COMMENT '创建者',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='标签表';
Nach dem Login kopieren

标签放单独的数据表,帖子数据表放一个tags字段,用|分割,标签中不允许出现‘|’字符。

建立一个表存放标签的 文章表添加一个字段存放标签id 当用户添加标签 检测标签是否重复 存放到标签表里 然后 更新文章表里的标签字段

两张表

  • 建立一个标签表

  • 一个文章标签关联表,字段为文章ID和标签ID
    这样查询的时候只要查询关联表标签对应的文章ID即可。

这应该是数据库设计中的多对多关系吧,设计3张表 文章表 标签-文章关联表 标签表, 标签文章表里设置双主键,分别是标签表跟文章表的ID, 查询的时候可以使用join语句直接过滤出想要的结果,还有一种方法 在新的mysql5.7里使用json来存放tag数据 这样可以避免设置多张表 如果答案错误,麻烦指出,如果满意,请帮我点赞 谢谢

我认@ivanilla说的对,这样的表设计就差不多可用了。也不用多表关联查询标签字段,使用起来也简单。

手上正好有纸,直接画了个简单的E-R图
请教下各位,就是在论坛写文章的时候会有个给文章加标签的功能,请问这个数据库应该怎样设计?

不知道别乱踩好不好,我的回答虽然没能直接帮他解决,可是也是一个非常好的思路。傻逼绕道,谢谢

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!