mysql 文章 字段设计_如何进行文章分类和标签的数据库设计

几乎在所有web项目中,都涉及文章分类和标签的设计,应该说这是一个比较常见、典型的案例。站长并不保证我的思路就是最好的,只是分享出来大家一起交流一下,互相促进与提高。我们假设的开发项目是一个博客系统,最核心的部分就是与文章相关的,那么我们今天讨论如何设计博客系统的文章分类和标签。1、首先,分类和标签都是要和具体的文章相关联的,当然也可能一些文章既没有分类也没有标签,这一点是大家在写查询的时候容易疏忽的地方。因为我们的第一感觉就是,在查询文章列表的时候关联分类表,查出所有的文章和分类,对应关系一般是文章表的分类id对应分类表的id,使用where子句进行限定。这里就存在一个问题了,由于使用了where子句,那么只能查询有分类的文章,而没有分类的文章就查询不到了。这时候怎么办?应该使用连接查询,left join,这要没有分类的文章,在文章分类id那一栏会显示null。通常我们只使用left join,而很少使用right join。2、一般,一篇文章最好只对应一个分类,当然如果你想要对应多个分类也可以。但站长并不提倡,文章在多个分类中重复会给人很不专业的感觉,即使有些文章可能确实设计到多方面的内容,那么你应就其中的侧重点来分类。而标签就不一样了,一篇文章可能有多个标签。这就意味着我们无法靠一个sql语句既查出所有文章的分类和标签,又做到查询结果中的文章id不重复。通常我们需要把查询出来的结果直接循环出来,那么这个结果一般是二维数组,第二维的都存储了唯一一篇文章的相关信息。但是,标签和文章是多对一的关系,多个标签对应一篇文章,如果你只用一条sql语句的话,那么我们查询出来的结果,当然也是多行,这不符合我们目标数据的要求。应此,需要在查询完文章和分类之后,在前面结果的基础上再查询一次文章标签,把两次的结果结合起来,存在数组中,这是对应文章列表页面的查询方法。对于具体文章页面,可以分两次查询。好了,还没有给出具体的数据库设计,就先说了如何查询结果,相信大家也看烦了,下面就举例说明:一、文章表:post,字段如下:id【唯一标识】,aid【作者id】,title【标题】,content【内容】,cid【分类id】二、分类表,category,字段如下:id【唯一标识,与post表的cid关联】,name【分类名】三、标签表,tag,字段如下:id【唯一标识】,name【标签名】四、标签与文章对应关系表,tag_relationship,字段如下:id【唯一标识】,postid【文章id,与post表的id关联】,tagid【标签id,tag表的id关联】有朋友可能会问:为什么要单独用一个表来存储文章与标签的对应关系,为什么不可以直接在tag表中增加一个文章id字段呢,比如:tag表:id,postid,name这样做的话,并不是不可以,但是,由于一篇文章对应多个标签,所以name字段的值会出现很多重复,比如一篇文章,假设文章id为1,有2个标签,php和mysql,那么在tag表会这样存储:id:1,postid:1,name:phpid2,postid:1,name:mysql另一篇文章,假设id为2,有2个标签,也是php和mysql,那么在tag表中它会这样存储:id:3,postid:2,name:phpid4,postid:2,name:mysql大家很快就发现了问题,这样的设计name字段也就是标签的名称在同一张表中可能会大量重复。但是这样设计的好处是,如果你要查询一个标签下有多少篇文章,只要单独查这个表就可以了,比如要查询含有php标签的文章有多少篇,只需要select count(name) ??from tag where name=’php’,就可以查出来。不好的地方是,如果要查询所有标签的集合,使用这种设计需要使用group by name语句来去除重复的行。如果用之前的那种,只需要select * from tag就可以了。一时之间,好像不太好取舍。这两种设计都会有数据冢余,第一种tag_relationship表中,存在tagid字段的重复;而这两种设计又都有各自的好处。那么我们到底该怎么选择呢?站长也说不好,所以无法为大家下结论。但是站长在研究wordpress数据结构的时候,发现wp是采用的单独建表存储文章与标签对应关系的方式。另外,如何设计有时候也是取决具体功能的需求的,所以这个问题就留给大家一起来讨论吧~ 标签:分类和标签, 博客数据库设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问!个人博客数据库设计一个非常重要的话题,需要考虑到许多因素,比如数据结构、数据类型、数据存储等等。在这里,我可以给您提供一些基本的思路和建议,希望能够帮助您更好地设计您的个人博客数据库。 首先,您需要考虑到您的博客需要存储哪些数据,比如文章、评论、标签分类等等。然后,您需要设计相应的数据表,每个数据表需要包含哪些字段,以及每个字段的数据类型和约束条件等等。在设计数据表时,您需要考虑到数据的一致性和完整性,以及数据的查询效率和存储空间的利用率等等。 其次,您需要考虑到数据的存储方式,比如使用关系型数据库还是非关系型数据库。如果您的博客数据比较复杂,建议使用关系型数据库,比如MySQL、PostgreSQL等等;如果您的博客数据比较简单,可以考虑使用非关系型数据库,比如MongoDB、Redis等等。 最后,您需要考虑到数据的备份和恢复,以及数据的安全性和可靠性。建议您定期备份数据,并将备份数据存储在不同的地方,以防数据丢失或损坏。同时,您需要采取一些措施来保护数据的安全性和可靠性,比如加密数据、限制访问权限等等。 希望以上建议能够帮助您更好地设计个人博客数据库,如果您有任何问题或需要进一步的帮助,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值