关系型数据库虽然存储用户的关系很简单,但是要求出用户关注被关注和互粉这种这块特别的麻烦,特别是用户A的粉丝与用户B的粉丝之间的关系,或者用户A的关注者与用户A自己的粉丝直接的关系等。

下面是一个要求:

功能:A关注B   B关注A   A取消关注B    B取消关注A

求出关系:A的粉丝列表   A的关注列表   A的互粉列表

方案1

测试准备

1.创建两个表:CREATE TABLE [dbo].[FollowTest_User](

[Id] [int] IDENTITY(1,1) NOT NULL,

[Name] [nvarchar](50) NOT NULL,

CONSTRAINT [PK_FollowTest_User] PRIMARY KEY CLUSTERED

(

[Id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

CREATE TABLE [dbo].[FollowTest_UserFollow](

[Id] [int] IDENTITY(1,1) NOT NULL,

[FollowUser] [int] NOT NULL,

[BeFollowedUser] [int] NOT NULL,

CONSTRAINT [PK_FollowTest_UserFollow] PRIMARY KEY CLUSTERED

(

[Id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

2.插入一些数据做测试:insert into FollowTest_User(Name) values('A');

insert into FollowTest_User(Name) values('B');

insert into FollowTest_User(Name) values('C');

insert into FollowTest_User(Name) values('D');

insert into FollowTest_User(Name) values('E');

insert into FollowTest_User(Name) values('F');

insert into FollowTest_User(Name) values('G');

insert into FollowTest_User(Name) values('H');

insert into FollowTest_User(Name) values('I');

insert into FollowTest_User(Name) values('J');

insert into FollowTest_User(Name) values('K');

insert into FollowTest_User(Name) values('L');

insert into FollowTest_User(Name) values('M');

insert into FollowTest_User(Name) values('N');

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(2,1);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(6,1);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(9,1);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(11,1);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(1,6);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(1,10);

insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(1,2);

表数据如下:

功能实现

A关注G:insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(1,7);

G关注A:insert into FollowTest_UserFollow(FollowUser,BeFollowedUser) values(7,1);

A取消关注G:delete FollowTest_UserFollow where FollowUser=1 and BeFollowedUser=7;

G取消关注A:delete FollowTest_UserFollow where FollowUser=7 and BeFollowedUser=1;

求出关系--A的粉丝列表

select uf.FollowUser

from FollowTest_UserFollow uf

left join FollowTest_User u on u.Id=uf.BeFollowedUser

where u.Name='A' and uf.BeFollowedUser=u.Id;

--A的关注列表

select uf.BeFollowedUser

from FollowTest_UserFollow uf

left join FollowTest_User u on u.Id=uf.FollowUser

where u.Name='A' and uf.FollowUser=u.Id;

--A的互粉列表

select uf2.BeFollowedUser as FollowAndBeFollowed

from FollowTest_UserFollow uf2

left join FollowTest_User u2 on u2.Id=uf2.FollowUser

where u2.Name='A' and uf2.FollowUser=u2.Id

and uf2.BeFollowedUser in(

select uf1.FollowUser

from FollowTest_UserFollow uf1

left join FollowTest_User u1 on u1.Id=uf1.BeFollowedUser

where u1.Name='A' and uf1.BeFollowedUser=u1.Id);

方案2

新增一个表FollowTest_MutualFollow表示互粉表,为了后面的判断简单点,约定User1>User2。CREATE TABLE [dbo].[FollowTest_MutualFollow](

[Id] [int] IDENTITY(1,1) NOT NULL,

[User1] [int] NOT NULL,

[User2] [int] NOT NULL,

CONSTRAINT [PK_FollowTest_Mutual] PRIMARY KEY CLUSTERED

(

[Id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

为了测试,往FollowTest_MutualFollow插入几条记录:insert into FollowTest_MutualFollow(User1,User2) values(1,6);

insert into FollowTest_MutualFollow(User1,User2) values(1,2);

insert into FollowTest_MutualFollow(User1,User2) values(3,6);

insert into FollowTest_MutualFollow(User1,User2) values(6,9);

1.当有关注的时候,在FollowTest_UserFollow判断是否是相互关注,若是则往FollowTest_MutualFollow插入一条记录。

2.当有取消关注的时候,先在FollowTest_MutualFollow判断下是否这二者有互粉情况,有的话则删除这条记录,再删除FollowTest_UserFollow表一条记录。

3.统计A的粉丝列表和A的关注列表和方案1一样。

4.统计F的互粉列表:select * from FollowTest_MutualFollow where User1=6 or User2=6。

微博相互关注互粉mysql表实现_数据库设计实现用户关注、被关注、互粉相关推荐

  1. 微博相互关注互粉mysql表实现_相互关注互粉mysql实现

    关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系 用词follower表示粉丝 -- 追随者 用词following表示关注 -- 追随 设计的结构必须能满足以下功能: 查询关注列表 ...

  2. 微博相互关注互粉mysql表实现_新浪微博的“关注功能”数据库是如何设计的

    展开全部 你好.方法有二个: 我觉得是这样设计的e69da5e887aa62616964757a686964616f31333335343362 一个字段记录他所关注的好友信息 应该是json的 然后 ...

  3. mysql的设计模式_数据库设计中使用设计模式

    一.引言 现代的企业开发中,越来越多地引入了多层架构设计模式,即使是小型的企业信息系统也逐渐向多层架构发展,以满足系统的可伸缩性以及可维护性.目前企业开发的平台占主导地位的是 J2EE 和 .NET ...

  4. mysql 备用字段_数据库设计之备用字段

    备用字段,也称 预留字段 . 相关描述: 在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用. 举例说明,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓 ...

  5. mysql逻辑结构设计_数据库设计:逻辑结构设计

    概念结构设计所得的E-R模型是对用户需求的一种抽象的表达形式,它独立于任何一种具体的数据模型,因而也不能为任何一个具体的DBMS所支持.为了能够建立起最终的物理系统,还需要将概念结构进一步转化为某一D ...

  6. mysql删除员工_数据库删除职工信息

    <数据库技术原理与应用教程第2版>--1.4数据管理 本节书摘来自华章出版社<数据库技术原理与应用教程第2版>一书中的第1章,第1.4节,作者 徐洁磐 操凤萍 ,更多章节内容可 ...

  7. 最新2023基于微信小程序的奶茶店自助饭店点餐订餐系统平台(SSM+mysql)-JAVA.VUE【数据库设计、论文、毕设源码、开题报告】

    摘 要 使用智能手机的用户经过多年的使用习惯,已经越来越不喜欢安装各种的APP,除了正常生活和工作所必须的APP,不喜欢因为喜欢某些内容而被强制安装APP软件了.最近几年,随着微信生态的布局,通过开发 ...

  8. mysql常用命令,mysql语法,mysql登陆、创建数据库、创建用户、更改密码、为用户授权...

    进入: mysql -u 用户名 -p[回车后输入密码即可] 更改密码: alter user "用户名"@"localhost" identified wit ...

  9. 管理mysql表知识点_数据库复习提纲(必考知识点整理)

    第1章 绪论 1 数据:数据是数据库中存储的基本对象. 数据库(DB):是长期存储在计算机内.有组织的.可共享的大量数据的集合. 数据库管理系统(DBMS):提供数据定义语言(DDL),用户通过它可以 ...

最新文章

  1. 简单了解request与response
  2. 24 个你应该了解的 PHP 库
  3. 用了ReSharpe硬是爽
  4. MyBatis-07MyBatis注解方式之@Select
  5. Java Jdbc减少交互提升批量处理性能,到底该如何优化才好?
  6. 云炬创业政策学习笔记20210116
  7. LeetCode 1642. 可以到达的最远建筑(二分查找 / 优先队列贪心)
  8. java 循环对比_Java stream 和 for 循环效率对比问题
  9. 产品经理如何通过拆产品,持续提升产品能力?附案例
  10. 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案
  11. 十大算法 — 冒泡排序法【C语言代码诠释】
  12. 学校后台管理系统 php,基于ssm的校园门户网站+后台管理系统
  13. matlab归一化mapminmax警告,matlab函数mapminmax归一化的问题
  14. java图片转pdf_java使用itextpdf将图片转换成pdf的简单实例 | 学步园
  15. Tecplot云图——数据文本格式1
  16. 微信小程序云开发(2)— 云数据库
  17. 数据结构9 - 常用的10种算法
  18. 如期而至的SVN服务器迁移引来一个大瓜XAMPP
  19. 晨风机器人插件编辑器_晨风机器人文本编辑器
  20. 设计一个智能客服系统

热门文章

  1. 计算机网络可靠传输是什么意思,可靠传输
  2. 联想A798T刷机实战
  3. 安装向导因错误而提前结束_Intune 连接器安装向导提前结束 - Intune | Microsoft Docs...
  4. Honeywell EPKS R5XX 系统装机及配置手册
  5. 文件夹(system.)无法删除,打开时提示“引用了一个不可用的位置” 解决办法
  6. 抖音搜索seo代理,优化排名
  7. 车载调频发射机解决方案
  8. 智慧校园应用系统建设方案
  9. ElasticSearch保姆级入门教程
  10. arcgis绘制等水位线图