SNS网站,就是我们通常所说的社交类网站,如人人网、世纪佳缘等,这些网站的基本功能如下:

1、用户可以注册并登录

2、用户之间可以互相关注、加好友、删除好友、评论文章、写站内信等

3、用户自己可以发布文章

4、用户对别人的文章添加评论

5、用户有自己的用户中心,也就是个人主页

6、用户可以在自己的个人主页知道有哪些用户来看访问过我

7、用户可以在个人主页查看自己关注的人的最新动态,比如发布了什么文章、加了谁为好友、关注了谁等

好,多的不说了,有了以上7个功能,一个小型的SNS就可以实现了,其他的功能可以另外扩展。站长只对最基本的SNS功能的实现做一下介绍。

数据库设计:

1、我们需要一张用户表来存储用户信息,字段有id,用户名,密码,email,qq,地址,注册时间,最后登陆时间等等或者更多。

2、我们需要一张文章表来存储用户写的文章,字段有id,标题,内容,发布时间,发布者id【跟用户表的id关联】,点击数等

3、我们需要一张朋友表来存储用户之间的好友关系,字段有id,申请好友的用户id【跟用户表id关联】,被申请好友的用户id,【跟用户表id管理】,关系生效标识【值通常为0/1,0代表申请未通过被申请人同意,1代表申请通过,2人之间的好友关系生效】,关系生效时间

阿里云-推广AD

4、我们需要一张关注表来存储用户之间的关注关系,字段有id,关注人的用户id【跟用户表id关联】,被关注人的用户id,【跟用户表id管理】,关注时间

5、我们需要一张站内信表来存储用户之间收发信内容,字段有id,发信人id【跟用户表id关联】,收信人id【跟用户表id关联】,标题,内容,发信时间,信件在发信人端状态标识【值通常有0/1/-1,0代表信件被放进了回收站,1代表信件存在于发件箱,-1代表邮件被彻底删除】,信件在收信人端的状态标识【值通常有0/1/-1,0代表信件被放进了回收站,1代表信件存在于收件箱,-1代表邮件被彻底删除】。

当点击发件箱时,只读取发信人状态标识为1的信件,当点击收件箱时只读取收信人状态标识为1的信件,当点击回收站的时候只读取发/收信件状态为0的邮件,当点击清空回收站时,把信件状态更新为-1,如果此时该信件的发信人状态和收信人状态都为-1,则彻底删除这条记录。

6、我们需要一张用户访问痕迹表来存储用户访问过哪些人的空间,字段有id,访问人id【跟用户表id关联】,被访问人id【跟用户表id关联】,访问时间。

7、我们需要一张文章评论表来存储用户对文章的评论,字段有id,文章id,评论人id【跟用户表id关联】,评论内容,评论时间,评论是第几楼。

8、我们需要一张用户动态表来存储用户最近的动作,字段有id,用户id,用户动作【值可以区分开来,加好友为a,关注为b,发布文章为c等等】,动作对象【值也要区分,加好友或者关注其他用户,则存储用户名,发布文章则存储文章标题,与动作对应】,用户动作发生时间

这里对个人中心的实现做一点小说明,哪些人来看过我,这个很好实现,稍微复杂一点的是我所关注的用户的动态,用户可能关注了很多人,当然没有必要显示所有人的动态,只需要按用户动态的发生时间排序,显示若干个就行了。

如何来读取用户动态呢,我们需要知道这么几个参数:1、我所关注的人的id【涉及关注表和用户表】;2、我所关注的人的动态【涉及用户动态表和用户表】,显然我们需要在用户表、关注表、用户动态表直接进行多表关联查询。

第一步:通过关联关注表和用户表,读取我所关注的人的 id,这里是一个子查询

第二步:查询用户动态表中id存在于第一步中读出的id集合中的记录,使用in语法

好了,有了这些设计,那么一个简单的SNS网站就可以实现了,它基本上满足了我们在线交流互动的功能。其他的功能可以在这个设计上进行扩展、改进,当然这里只是对基本原理做一下介绍,数据库的设计可能并不合理,开发者在实际开发中需要仔细斟酌。