Php 社交网络-用户配置文件设计模式问题

Php 社交网络-用户配置文件设计模式问题,php,mysql,database,schema,social-networking,Php,Mysql,Database,Schema,Social Networking,我正在我的网站上创建用户配置文件,但不知该如何设计:有许多字段,有些是1:1,如居住城市、生日等。但有50多个字段是1:多(或多对多?),如喜爱的电影、运动队、约会偏好、屏幕名称、电话号码,电子邮件地址等。当我们有以前工作过的公司、以前的学校等时,它会变得更复杂。一个人可以属于许多公司,在这个组中有许多字段,如工作日期、部门、公司名称、行业名称等 所以问题是如何存储所有这些?如果我们规范化所有这些概要文件字段,将有许多表要连接。据我所知,对于社交网络,人们建议采用非规范化方法。但无论如何,我将所

我正在我的网站上创建用户配置文件,但不知该如何设计:有许多字段,有些是1:1,如居住城市、生日等。但有50多个字段是1:多(或多对多?),如喜爱的电影、运动队、约会偏好、屏幕名称、电话号码,电子邮件地址等。当我们有以前工作过的公司、以前的学校等时,它会变得更复杂。一个人可以属于许多公司,在这个组中有许多字段,如工作日期、部门、公司名称、行业名称等

所以问题是如何存储所有这些?如果我们规范化所有这些概要文件字段,将有许多表要连接。据我所知,对于社交网络,人们建议采用非规范化方法。但无论如何,我将所有用户详细信息和配置文件详细信息存储在主用户表中,因此每一行都是唯一的用户。如果我必须存储所有这些多个首选项,特别是喜欢的电影可以有数百个,而过去的公司本身有一整组字段,因此在用户表中会有很多重复项


社交网络对此采取什么方法?

社交网络数据存储问题实际上与一般的数据存储问题没有什么不同。。。规范化和相关数据是高效“存储”这些数据的最佳方式。RDBMS是用来处理这些关系的——PK-FK关系和连接是关系数据库的主要内容。。。因此,即使您看到“join”等,DB在处理这些连接时(应该)是高效的

从获取相关数据的使用角度来看——确保索引准确且优化——并利用视图“展平”显示所需的数据

因此,无论您使用什么应用程序服务器来获取数据,都将调用该视图,该视图将“显示”给您,即开发人员,作为数据的“更平坦”表示,使UI和APP serer交互更干净、更高效(在资源和编码方面)

作为一项一般性的指导原则——在数据仓库环境中,数据扁平化通常被认为是“可接受的”……当然,我不知道该如何展开“到底如何规范化,‘规范化’”(规范化的第一种-第六种形式…)这一可怕的辩论

我想你可能会认为SN更像OLAP,而不是OLTP。在这种情况下,“某些”去规范化数据存储是常见的——也是可以接受的——实际上,你可以决定你想要的东西是如何去规范化的……例如,在你的例子中,就业历史和电影、体育。我认为简单的1:many允许重复条目n这样的物品就可以了,而且可能更容易维护


希望这是有帮助的,

社交网络数据存储问题实际上与一般的数据存储问题没有什么不同…规范化和相关数据是有效“存储”这些数据的最佳方式。RDBMS是用来处理这些关系的-PK-FK关系和连接是关系数据库的主要点…因此n尽管您看到“连接”等,但DB在处理这些连接时(应该)是高效的

从获取相关数据的使用角度来看——确保索引准确且优化——并利用视图“展平”显示所需的数据

因此,无论您使用什么应用程序服务器来获取数据,都将调用该视图,该视图将“显示”给您,即开发人员,作为数据的“更平坦”表示,使UI和APP serer交互更干净、更高效(在资源和编码方面)

作为一项一般性指导原则,在数据仓库环境中,数据扁平化通常被认为是“可接受的”。。。当然,我不知道该如何展开“到底有多规范,‘规范化’”(规范化的第一-第六种形式…)这场可怕的辩论

我想你可以认为SN更像OLAP,而不是OLTP。在这种情况下,“某些”非规范化数据存储是常见的——并且是可以接受的——实际上,您可以决定您想要的非规范化数据存储方式。。。例如,在你的例子中,就业历史和电影、体育。我认为一个简单的1:许多允许在这样的项目上重复条目就可以了,而且可能更容易维护


希望这是有帮助的,

您必须坚持创建模式的规范化策略。查询可能是一种痛苦,您应该特别小心处理,尤其是在处理连接时。如果您是一名dot开发人员,我想LINQ会帮你解决d难题。我相信你的RDM足够聪明,能够以出色的性能处理你的查询。需要注意的一点是您的查询结构。编写基于性能的查询。正如我所说,LINQ应该做到最好……干杯

您必须坚持创建模式的规范化策略。查询可能是一种痛苦,您应该非常小心地处理,尤其是在处理连接时。如果您是dot开发人员,我想LINQ会帮你解决d难题。我相信你的RDM足够聪明,能够以出色的性能处理你的查询。需要注意的一点是您的查询结构。编写基于性能的查询。正如我所说,LINQ应该做到最好……干杯

但是为什么人们会选择社交网络的非规范化路线?或者仅仅是因为像facebook和谷歌这样的大公司这么做,所以全世界都不得不复制它们?我很想说“是的,差不多”。但这有可能引发一场火焰战。我只是对答案投了赞成票,但为什么人们会选择社交网络的非规范化路线呢?或者仅仅是因为像facebook和谷歌这样的大公司这么做,所以全世界都不得不复制它们?我很想说“是的,差不多”。但这有可能引发一场火焰战。我只是对答案投了赞成票。