大家在某些博客都可以看到文章会带上一些标签,标签的作用是对目标进行分类,让浏览博客的人能更快找到自己需要的内容,提高查阅效率。

比如本博客的标签示例:

点击标签就会进入相应的标签目录。

博客文章与标签的关系

正如上面的图片所示,一个文章可以有多个标签,而一个标签下也可以拥有多篇文章,所以很显然,文章与标签是一个多对多的关系。

文章与标签的数据库关系设计

除了文章表与标签表,多对多关系中间还都会有一个关系表,我们用这个表的每一条记录来表示一篇文章与一个标签的关系。

文章与标签的数据库关系的实现

我使用的是基于SQLAlchemy(orm工具)flask_sqlalchemy包,对于设计数据库模型是非常方便的。

首先先写一个关系表

registrations=db.Table('registrations',
    db.Column('post_id',db.Integer,db.ForeignKey('posts.id')),
    db.Column('tag_id',db.Integer,db.ForeignKey('tags.id')))

然后在文章表或标签表中定义关系

class Post(db.Model):
    __tablename__='posts'
    id=db.Column(db.Integer,primary_key=True)
    title=db.Column(db.String(64))
    body=db.Column(db.Text)
    ...
    tags=db.relationship('Tag',
                         secondary=registrations,
                         backref=db.backref('posts',lazy='dynamic'),
                         lazy='dynamic')
class Tag(db.Model):
    __tablename__='tags'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),index=True,unique=True)

操作

>>>tag=Tag(name='python')
>>>db.session.add(tag)
>>>post=Post(title='title',body='body'...)
>>>post.tags.append(tag)
>>>db.session.add(post)
>>>db.session.commit()

其他

还可以在post模型中添加一些方法,让操作更加简单,比如将一段由空格分隔的标签集合字符串('python code balabala')转换成一个个tag实例,然后与post建立关系等等。

评论

  • 最新随笔

  • 尝试让DALLE生成一些连续的精灵图,让gpt帮忙生成一些提示词,如果能稳定输出的话就很强大了。
    让gpt帮忙生成的DALLE提示词
    "Generate a pixel art sprite sheet of a character walking in four directions (north, south, east, west) in a retro video game style."
    "Create a series of pixel art frames showing a character performing different actions like walking, running, jumping, and attacking in a classic 2D game aesthetic."
  • 路过别人山庄的门口,被一条大黑狗边叫边追过来,幸好骑电动车,不然还不一定跑得过,哈哈哈哈哈哈哈哈哈哈。
  • 最近两周也没咋出去玩,主要也是觉得没啥好玩的(笑哭)。看完布莱恩阿瑟的《复杂经济学》后,里面那个酒吧问题勾起我的兴趣,最近空了就花了些时间实现个python版本,顺便搞了篇博文,很享受这种新知识能和已有知识碰撞的感觉。(配张前段时间拍的图片,梧桐山门口前面那条路,挺漂亮的)
  • 盐田港夜景
  • 为啥这猫总喜欢喝杯子里的水
  • 确实开始冷了,在树林里至少要比人类聚集区低个几度,进出入口就能很明显感觉到。看看深圳水库的风景,貌似后面的视野更开阔。
  • 给随笔加了多图的功能,传一传周末拍的风景图,漫无目的的逛也挺好玩的。
  • 逻辑自洽是一套体系的根基,最根本的因素,最吸引人的地方