关于 Facebook 等社交网络的数据库模式
Posted
技术标签:
【中文标题】关于 Facebook 等社交网络的数据库模式【英文标题】:Database schema about social networking like Facebook 【发布时间】:2014-03-23 20:34:42 【问题描述】:和 Facebook 一样,我有帖子、cmets 和用户资料。
我认为
帖子和cmets不需要需要用户的详细信息
仅用户个人资料需要详细信息
所以我把用户信息分为main和detail
这是架构。
问题
是否需要将用户数据分为main和details?
为什么不是或为什么是?
感谢申请!
【问题讨论】:
【参考方案1】:我建议您使用单独的表格,因为您可能一次不需要所有这些信息。你可以做任何一种方式,但我认为你需要一次所有的数据。
表 1(用户身份验证)
此表仅包含登录信息,并包含三列(user_name、hashed_password、UID)
因此,您的查询将选择 user_name 和 hashed_password 匹配的 UID。我还建议永远不要将可读密码存储在数据库表中,因为这可能会成为安全问题。
表2(基本信息)
此表将包含您在注册时获得的最少信息以制作基本个人资料。这些字段将由 UID、name、DOB、zip、link_to_profile_photo、 电子邮件 以及您想要的任何基本信息。 email 有点特别,因为如果您要求 user_name 是一个电子邮件地址,则没有理由重复两次。
表 3(扩展信息)
此表将包含用户可以输入的任何可选信息,例如由 UID 分配的 phone_number、bio 或 address强>。
然后,您可以添加任意数量的其他表格。一个用于 Post,一个用于 cmets,等等。
Post 表的示例如下:
post_id、UID、the_post、date_of_post、赞等。
然后发表评论
comment_id、for_post_id、UID、the_comment、date_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 等社交网络的数据库模式的主要内容,如果未能解决你的问题,请参考以下文章