本文档解释了RealWorld应用程序中的数据关系。它描述了用户、文章、评论和标签等实体在数据库模式中如何相互关联,以及这些关系如何通过API暴露。
有关数据模型本身的信息,请参阅数据模型。
RealWorld应用程序实现了一个具有核心实体之间关系的社交博客平台。这些关系支持关注用户、喜欢文章和内容标签等功能。
来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96
RealWorld数据库模式通过外键和多对多关系中的连接表来实现关系。
来源:apps/api/prisma/migrations/20241009081140_init/migration.sql1-96
RealWorld应用程序中的用户拥有多种关键关系,构成了平台的社交特性。
用户可以关注其他用户,从而在应用程序内创建社交网络。这实现为一个多对多的自引用关系。
在数据库模式中,这是通过_UserFollows连接表实现的。
此关系通过API暴露,途径如下:
POST /profiles/{username}/follow - 关注用户DELETE /profiles/{username}/follow - 取消关注用户来源
用户可以收藏他们喜欢的文章。这种多对多关系将用户与其收藏的文章联系起来。
在数据库模式中,这是通过_UserFavorites连接表实现的。
此关系通过API暴露,途径如下:
POST /articles/{slug}/favorite - 收藏一篇文章DELETE /articles/{slug}/favorite - 取消收藏一篇文章来源
文章与用户(作者)、评论和标签有关联。
每篇文章都由一个用户撰写,这构成了从用户到文章的一对多关系。
在数据库模式中,这是通过外键实现的。
当返回文章时,此关系会反映在API中,响应中会包含作者信息。
来源
文章可以有多个标签,每个标签也可以与多篇文章关联,形成多对多关系。
在数据库模式中,这是通过_ArticleToTag连接表实现的。
文章可以通过API按标签进行过滤。
GET /articles?tag={tagName} - 获取带有特定标签的文章来源
评论与文章和用户(作者)都有关联。
每条评论都由一个用户撰写,并属于一篇文章,这构成了双重关系。
在数据库模式中,这是通过外键实现的。
这些关系通过API暴露,途径如下:
GET /articles/{slug}/comments - 获取一篇文章的评论POST /articles/{slug}/comments - 为一篇文章创建评论DELETE /articles/{slug}/comments/{id} - 删除文章的一条评论来源
RealWorld数据库中的所有外键关系都配置为ON DELETE CASCADE,这意味着当父记录被删除时,所有相关的子记录也会被自动删除。
例如
来源:apps/api/prisma/migrations/20241009081140_init/migration.sql10-11 apps/api/prisma/migrations/20241009081140_init/migration.sql22-23 apps/api/prisma/migrations/20241009081140_init/migration.sql47-48 apps/api/prisma/migrations/20241009081140_init/migration.sql55-56 apps/api/prisma/migrations/20241009081140_init/migration.sql63-64
实体之间的关系会影响数据在API响应中的返回方式。例如,当检索一篇文章时:
favorited布尔值(来自用户-文章收藏关系)favoritesCount(用户-文章收藏计数)同样,对于用户资料:
following布尔值(来自用户-用户关注关系)这种反规范化允许客户端在不进行额外API请求的情况下显示关系信息。
来源:api/openapi.yml497-535 api/openapi.yml481-497
RealWorld数据库模式实现了丰富的关系集,支持关注用户、收藏文章和评论内容等社交功能。这些关系以一种允许客户端轻松访问相关数据的方式通过API暴露。
主要关系是:
这些关系构成了RealWorld实现的社交博客平台的基础。