参考外文博客:https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-viii-followers
这章将学习如何实现类似于Twitter和其他社交网络的“粉丝”或“关注”,比如关注你。
接下来,将更多介绍应用程序的数据库。让用户能够轻松选择Ta们想要关注的其他用户。因此,将扩展数据库,以便跟踪谁在关注(粉)谁。
再次学习数据库关系
我想每一个用户维护一个“关注”和“关注者”列表。不幸的是,关系数据库没有我能用于这些列表的列表类型,所有都有记录、这些记录之间的关系。
数据库中有一个表示用户的表,所以剩下的是提出可以为关注、关注者链接建模的正确关系类型。现在是学习基本数据库关系类型的好时机:
一对多
通过这个关系连接的两个实体分别是用户,帖子。一个用户有很多篇帖子,每个帖子有一个用户。在数据库中,这个关系在多侧使用外键。在上述关系中,外键user_id字段
添加到posts表
中。这个字段将每个帖子连接到user表
中其作者的记录。
明显地,user_id字段提供了对给定帖子作者的直接访问,但反过来,为使得关系有用,我们应该可以获得给定用户所编写的帖子列表。posts表
中user_id字段
也足以回答此问题,因为数据库中具有允许有效查询的索引,如 【检索user_id为X的所有帖子】
多对多
多对多
关系有点复杂。例如,考虑一个拥有students
和teachers
的数据库,可以说一个学生有很多个老师,一个老师有很多个学生。这就像来自两端的两个重叠的一对多
关系
对于这种类型的关系,我们应该能够查询到数据库,并取得教授给定学生的教师列表、教师班级的学生列表。这在关系数据库中表示实际上并不重要,因为无法通过向现有表添加外键来完成。
虽然一开始可能看起来不太明显,但是具有两个外键的关联表 能够有效地回答关于多对多
关系的所有查询。
多对一,一对一
多对一
关系,类似于一对多
关系。不同之处在于从“多”侧看这种关系。
一对一
关系是一对多
关系的特殊情况。表示是类似的,但是得向数据库添加约束以防止“多”侧具有多个链接。虽然在某些情况下,这种关系很有用,但并不像其他关系类型常见。
选用的模型,很容易确定跟踪关注者的正确数据模型是多对多关系。因为一个用户可以关注很多用户,而一个用户也可以被很多用户所关注。在学生、教师的案列中,我们通过