我可以为我的社交网站中的每个用户创建每个表吗?

Posted

技术标签:

【中文标题】我可以为我的社交网站中的每个用户创建每个表吗?【英文标题】:Can i create each table for each user in my social networking site? 【发布时间】:2011-02-01 21:15:39 【问题描述】:

我正在创建一个功能类似于 Facebook 的社交网站。 我想从我的数据库的架构设计开始。 我的想法是为注册到我们网站的每个用户创建每个表。我做得对吗?

如果有一百万用户注册到我的网站,就会创建一百万个表格。如何继续优化这个?请建议我克服这个问题的技术,一些参考资料或书籍来了解这些概念将非常有用..

提前致谢。

【问题讨论】:

你走错路了,大错特错!简单地说:无论您需要在数据库中存储多少数据项,您都应该始终拥有相同数量的表。 【参考方案1】:

不是你想要的方式。

您想要做的是有一个表(可能称为'users'),其中包含每个注册用户的一行。为每个用户创建一个新表完全毫无意义,并且会导致糟糕的性能。

可能是这样的:

表用户 - 用户名 AS VARCHAR(255) - 密码 AS VARCHAR(255) (当然使用散列密码) - ...

然后当用户注册时,只需将他们提供的信息作为新行插入到users 表中。

【讨论】:

但是,如果用户每天发布状态更新,我是否会更新我在用户表中输入的行中的数据? @Noddy:状态更新将是一个单独的表,其中包含一个字段'user_id',该字段链接到users 表中的该用户。至于更新行,只需使用 SQL UPDATE 命令即可。 @GeorgeEdison,只是跟进状态更新。所有状态更新,无论发布的是哪个用户 ID,它都应该属于一个表,并且该表将由 user_id 字段通过外键链接?【参考方案2】:

那将是巨大的矫枉过正。您可能应该阅读数据库设计(从规范化开始,但不要过度)。然后为每个用户写下你要保存的内容,并思考如何在不重复保存数据的情况下保存它。

但我很确定每个用户的表不是一个选项。

【讨论】:

是的,好吧,也许是用词不当。这有点“错误,因为它是矫枉过正”,但话又说回来,也许你是对的,我应该选择其他词【参考方案3】:

你一定是混淆了database、table、field (or column)、record (or row)这些词的含义。

数据库包含特定项目的所有数据。每个项目总是有一个数据库(或几乎总是) 表格包含特定实体的所有数据,并且说实体,我的意思是可以想象为真实或单独存在的对象类型。一个人是一个实体,一本书是一个实体,一部电话是一个实体,一部电影是一个实体,等等。每一个都是数据库中的单独表。 字段(或列)是表示表实体的特定特征(特征)的数据类型。例如,用户表可以包含以下字段:NAMESURNAMEAGE 等。这些都是用户拥有的功能。 记录(或行)是一个表的实际项目。它是表实体的单个“部分”。例如,在用户表中,一条记录是一个用户,即NAME:"John", SURNAME:"Smith", AGE:"32"

在您的示例中,我可以肯定地告诉您,您只需要一个数据库。您想为许多用户存储信息,因此您需要一个表,名为USER。您需要为您的用户存储特征,例如:姓名、姓氏、年龄、地址等,然后您需要在此表中创建相应字段NAMESURNAMEAGEADDRESS 等。然后您需要将数据作为记录插入到数据库中。这将是您要存储的每个用户的一条记录。

【讨论】:

以上是关于我可以为我的社交网站中的每个用户创建每个表吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该为社交网络数据库的用户及其个人资料创建单独的表吗?

如何为用户实现关注者,如在 twitter 中

如何为用户创建无痛的安全春季社交注册/登录

需要为我的基于社交网络的网站构建新闻和活动提要有啥想法吗? [关闭]

在网站上存储/跟踪用户活动 [关闭]

如何使用 MERNG 实现社交媒体提要?