关于 Facebook 等社交网络的数据库模式

Posted

技术标签:

【中文标题】关于 Facebook 等社交网络的数据库模式【英文标题】:Database schema about social networking like Facebook 【发布时间】:2014-03-23 20:34:42 【问题描述】:

和 Facebook 一样,我有帖子、cmets 和用户资料。

我认为

帖子和cmets不需要需要用户的详细信息

用户个人资料需要详细信息

所以我把用户信息分为ma​​indetail

这是架构。

问题

是否需要将用户数据分为ma​​indetails

为什么不是或为什么是?

感谢申请!

【问题讨论】:

【参考方案1】:

我建议您使用单独的表格,因为您可能一次不需要所有这些信息。你可以做任何一种方式,但我认为你需要一次所有的数据。

表 1(用户身份验证)

此表仅包含登录信息,并包含三列(user_namehashed_pa​​sswordUID

因此,您的查询将选择 user_namehashed_pa​​ssword 匹配的 UID。我还建议永远不要将可读密码存储在数据库表中,因为这可能会成为安全问题。

表2(基本信息)

此表将包含您在注册时获得的最少信息以制作基本个人资料。这些字段将由 UIDnameDOBziplink_to_profile_photo电子邮件 以及您想要的任何基本信息。 email 有点特别,因为如果您要求 user_name 是一个电子邮件地址,则没有理由重复两次。

表 3(扩展信息)

此表将包含用户可以输入的任何可选信息,例如由 UID 分配的 phone_numberbioaddress强>。

然后,您可以添加任意数量的其他表格。一个用于 Post,一个用于 cmets,等等。

Post 表的示例如下:

post_idUIDthe_postdate_of_post等。

然后发表评论

comment_idfor_post_idUIDthe_commentdate_of_comment喜欢,等等。

从长远来看,将其分解为小部分会更有效。

【讨论】:

一些基本信息只有在我加载我的个人资料时才需要,我应该将它们分开到另一个表中吗? 是的,您可以将其添加到扩展信息表中。基本信息应该是最常用的数据。因此,如果您网站的每个页面都有用户名和个人资料照片,那么您可能希望在基本表格中拥有它们。【参考方案2】:

数据库性能与磁盘寻道时间相关。磁盘寻道时间是数据库性能的瓶颈。对于大表,您可能需要大量查找时间来定位和读取条目。对于 post 和 cmets,您不需要用户详细信息,只需要用户主要信息,当您仅读取 post 和 cmets 的用户 ID 时,您可能会减少阅读时间。与 user_main_info 的连接也会更快。您可以将需要最频繁阅读的数据的最小部分保留在一个表中,而将其他详细信息保留在另一个表中。但是,在您总是需要一起阅读所有用户信息的情况下,这不会给您带来任何好处。

【讨论】:

【参考方案3】:

1)将添加用户信息表

ex:create table fb_users
(intuserid primary key,
username varchar(50),
phoneno int,
emailid varchar(max))

2) 好友请求的发送将是

2.a)创建名为friends、friend requestor、friend requested by、status b/w的表名,Active flag

ex:create table fb_friends
(intfriendid primary key,
intfriendrequestor int (foreign key with fb_users's(intuserid)),
intfriendrequestedby int (foreign key with fb_users's(intuserid)),
statusid varchar(max)(use the status id from the below table which is a look up table),

active bit)

3)为status创建表

3.a)创建名为status、statusname、statusdesc、Active flag的表名

ex:create table fb_staus
(intstatusid primary key,
statusname varchar,
statusdesc varchar,
active bit)

状态可能是

待定 赞同 已删除 ..等

4) 类似地用于创建群组、喜欢、cmets 也

将分别为它们中的每一个和用户表中的 intuserid 的外键创建一个表 为他们每个人都链接了

【讨论】:

以上是关于关于 Facebook 等社交网络的数据库模式的主要内容,如果未能解决你的问题,请参考以下文章

社交网络数据库模式中的活动流/提要/新闻

构建社交网络类型应用程序的模式?

从多个社交网络(Facebook 和 Linkedin...)获取统一配置文件的数据库方案

在新的社交网络中开放社交[关闭]

PHP 的社交网络 API

用户操作,如社交网络 facebook、myspace,所有大的