社交网络数据库设计

时间:2016-03-22 21:38:14

标签: php mysql database

我正在为社交媒体设计一个类似于facebook结构的数据库。我正在使用MySQL。我们数据库的主要目标是性能,它必须处理大量请求。

我有一个用户,朋友,墙上的帖子,评论和喜欢的列表。

Q1-对于用户来说,我有几种类型的用户,我有普通用户,主管和管理员。对于该表,我正在考虑定义一个父用户表,然后继承该信息,但同时字段是相同的。 例如:

user
=============
id
username
password
email
isAtcive
country

noraml_user
===============
name
..
..
user_id

supervisor
==============
name
..
..
user_id

admin
=======
name
..
..
user_id

我因为性能而考虑了这种方法,因此我不是搜索使用用户类型的单个用户(以一百万用户为例),而是搜索(表管理员中的300K用户)。我是对的吗?

Q2-我喜欢帖子和评论。这是我的设计

posts
==========
id
content

comments
==========
id
content
post_id

posts_likes
==========
id
post_id
user_id

comment_likes
==========
id
comment_id
user_id

你认为这是正确的,或者我只是为以下的喜欢制作一个表

likes
=========
id
post_id(nullable)
comment_id(nullable)
user_id

什么是最好的方法?

问题3 - 您能否为我提供一些设计社交网络数据库的技巧?

谢谢:)

1 个答案:

答案 0 :(得分:1)

Q1:您不应为不同的用户类型创建单独的表。实际上,您应该在公共用户表中具有用户角色列。然后,此角色将定义用户可以执行的操作。索引的重点是有效地查找表的子集。

Q2:再次,你可能会发现你有内容和喜欢(甚至可能是“反应”)。除非有特定的理由让帖子保持特殊,否则它们实际上只是没有父母的内容。

问题3:是的,这样就可以为这样的网站提出广泛的问题。