微博相互关注互粉mysql表实现_数据库设计实现用户关注、被关注、互粉
关系型数据库虽然存储用户的关系很简单,但是要求出用户关注被关注和互粉这种这块特别的麻烦,特别是用户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表实现_数据库设计实现用户关注、被关注、互粉相关推荐
- 微博相互关注互粉mysql表实现_相互关注互粉mysql实现
关注关系产生的四种关系状态 关注 粉丝 双向关注(互粉) 无关系 用词follower表示粉丝 -- 追随者 用词following表示关注 -- 追随 设计的结构必须能满足以下功能: 查询关注列表 ...
- 微博相互关注互粉mysql表实现_新浪微博的“关注功能”数据库是如何设计的
展开全部 你好.方法有二个: 我觉得是这样设计的e69da5e887aa62616964757a686964616f31333335343362 一个字段记录他所关注的好友信息 应该是json的 然后 ...
- mysql的设计模式_数据库设计中使用设计模式
一.引言 现代的企业开发中,越来越多地引入了多层架构设计模式,即使是小型的企业信息系统也逐渐向多层架构发展,以满足系统的可伸缩性以及可维护性.目前企业开发的平台占主导地位的是 J2EE 和 .NET ...
- mysql 备用字段_数据库设计之备用字段
备用字段,也称 预留字段 . 相关描述: 在数据表中,不仅设计了当前所需要的字段,而且还在其中留出几个字段作为备用. 举例说明,我设计了一个人员表(Person),其中已经添加了各种必要的字段,包括姓 ...
- mysql逻辑结构设计_数据库设计:逻辑结构设计
概念结构设计所得的E-R模型是对用户需求的一种抽象的表达形式,它独立于任何一种具体的数据模型,因而也不能为任何一个具体的DBMS所支持.为了能够建立起最终的物理系统,还需要将概念结构进一步转化为某一D ...
- mysql删除员工_数据库删除职工信息
<数据库技术原理与应用教程第2版>--1.4数据管理 本节书摘来自华章出版社<数据库技术原理与应用教程第2版>一书中的第1章,第1.4节,作者 徐洁磐 操凤萍 ,更多章节内容可 ...
- 最新2023基于微信小程序的奶茶店自助饭店点餐订餐系统平台(SSM+mysql)-JAVA.VUE【数据库设计、论文、毕设源码、开题报告】
摘 要 使用智能手机的用户经过多年的使用习惯,已经越来越不喜欢安装各种的APP,除了正常生活和工作所必须的APP,不喜欢因为喜欢某些内容而被强制安装APP软件了.最近几年,随着微信生态的布局,通过开发 ...
- mysql常用命令,mysql语法,mysql登陆、创建数据库、创建用户、更改密码、为用户授权...
进入: mysql -u 用户名 -p[回车后输入密码即可] 更改密码: alter user "用户名"@"localhost" identified wit ...
- 管理mysql表知识点_数据库复习提纲(必考知识点整理)
第1章 绪论 1 数据:数据是数据库中存储的基本对象. 数据库(DB):是长期存储在计算机内.有组织的.可共享的大量数据的集合. 数据库管理系统(DBMS):提供数据定义语言(DDL),用户通过它可以 ...
最新文章
- 简单了解request与response
- 24 个你应该了解的 PHP 库
- 用了ReSharpe硬是爽
- MyBatis-07MyBatis注解方式之@Select
- Java Jdbc减少交互提升批量处理性能,到底该如何优化才好?
- 云炬创业政策学习笔记20210116
- LeetCode 1642. 可以到达的最远建筑(二分查找 / 优先队列贪心)
- java 循环对比_Java stream 和 for 循环效率对比问题
- 产品经理如何通过拆产品,持续提升产品能力?附案例
- 基于EasyDSS流媒体服务器实现的直播流管理与鉴权的后台方案
- 十大算法 — 冒泡排序法【C语言代码诠释】
- 学校后台管理系统 php,基于ssm的校园门户网站+后台管理系统
- matlab归一化mapminmax警告,matlab函数mapminmax归一化的问题
- java图片转pdf_java使用itextpdf将图片转换成pdf的简单实例 | 学步园
- Tecplot云图——数据文本格式1
- 微信小程序云开发(2)— 云数据库
- 数据结构9 - 常用的10种算法
- 如期而至的SVN服务器迁移引来一个大瓜XAMPP
- 晨风机器人插件编辑器_晨风机器人文本编辑器
- 设计一个智能客服系统
热门文章
- 计算机网络可靠传输是什么意思,可靠传输
- 联想A798T刷机实战
- 安装向导因错误而提前结束_Intune 连接器安装向导提前结束 - Intune | Microsoft Docs...
- Honeywell EPKS R5XX 系统装机及配置手册
- 文件夹(system.)无法删除,打开时提示“引用了一个不可用的位置” 解决办法
- 抖音搜索seo代理,优化排名
- 车载调频发射机解决方案
- 智慧校园应用系统建设方案
- ElasticSearch保姆级入门教程
- arcgis绘制等水位线图