社交网络 - 用户配置文件设计架构问题

时间:2010-12-02 16:03:49

标签: php mysql database schema social-networking

我在我的网站上创建了用户个人资料,但却失去了如何设计:有很多字段,有些是1:1的居住城市,生日等等。但是有超过50个字段是1:很多(或许多人?)喜欢喜欢的电影,运动队,约会偏好,屏幕名称,电话号码,电子邮件地址等。当我们以前的公司在以前的学校工作时,它变得更加复杂。一个人可以属于许多公司这个组中有很多领域,比如Date工作,部门,公司名称,行业名称等。

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

社交网络采用什么方法?

2 个答案:

答案 0 :(得分:3)

社交网络数据存储问题与一般的数据存储问题确实没有什么不同...规范化和相关数据是有效“存储”此数据的最佳方式。 RDBMS用于处理这些关系 - PK-FK关系和JOINS是关系数据库的主要部分...所以即使你看到“加入连接连接等”,数据库(应该)在处理这些连接方面是有效的

从USAGE的角度来看相关数据 - 确保您的索引准确和优化 - 并利用VIEWS“展平”显示所需的数据......

因此,无论您使用什么样的应用程序服务器来获取数据,都会调用VIEW - 开发者将“看起来”作为数据的“更平坦”表示,使UI和APP服务器交互更清晰,更高效(无论是资源还是编码),

作为一般指导原则 - 在数据仓库环境中,数据扁平化通常被认为是“可接受的”......当然,我不知道如何打开“正常化,正常化”的怪异辩论(“第一种 - 第六种规范化形式......)

我猜你可以把SN想象成OLAP,而不是OLTP。在某种情况下,“某些”非标准化数据存储是常见的 - 并且可以接受 - 实际上,您可以决定您想要的东西如何去标准化...例如 - 在您的示例中,就业历史和电影,体育。我认为一个简单的1:许多允许在这些项目上重复输入会很好,并且可能更容易维护......

希望这很有帮助,

答案 1 :(得分:0)

你必须坚持创建你的架构的规范化策略。查询可能是一个痛苦,你应该极其小心处理,特别是在处理连接时。如果你是一个点开发人员,我想LINQ会处理d痛苦你相信你的RDMS非常聪明,可以很好地处理你的查询。需要注意的一件事是你的查询结构。写基于性能的查询。正如我所说,LINQ应该做到最好....欢呼