追随者列表是否最好存储在CSV数据库字段中?

时间:2015-04-17 16:14:44

标签: php mysql

我想知道使用PHP和MySQL数据库生成关注者列表的最佳方法是什么。所以这里有两种我发现可行的方法。

以下是我找到的第一种方法:我可以为每个用户创建一个列,其中包含他们关注的所有用户ID。当我去检索列表时,我会分解id列表,以便我可以从每个用户中选择所有数据。

以下是数据库中的内容:

User ID              Following
1                    2,3,5,6,7,9,10
5                    10,5,2,20,1

我发现的另一个解决方案是,每当用户想要将某人添加到他们的“关注”列表中时,数据库将只包含他们所关注的特定人员的1行。

User ID        Following
1              2
1              5
2              1
1              42

因此,从长远来看,我想知道哪种方法是组织数据和检索数据以显示新闻源的最有效方法 - 最简单,成本最低的方法。 (我已经有一个包含所有用户帖子的表格。)

2 个答案:

答案 0 :(得分:3)

使用第二个选项:每个后续记录都有一行的表。数据库旨在处理数百万行,因此不要害怕使用它们。特别是,只存储整数的行将非常有效。您可以自由使用连接和其他功能。

逗号分隔的字符串解决方案不会向上扩展,因为数据库引擎必须不断地解析它,效率非常低,特别是如果它大大增加。另外考虑一下你所使用的字段长度,你可能会发现随着用户获得更多关注者,你必须定期调整它的大小。

答案 1 :(得分:0)

这两种解决方案有两种类型,用于检索和处理数据。这将是品味和优势的呼唤。

DATABASE / JSON / CODE 第一个是在检索追随者字符串后操纵数据的代码解决方案。对此的缺点是典型的信息存储,因为分隔字符串是数据库管理员和程序员的祸根。如果您要将元信息添加到以下连接,则不能。添加例如“跟随”,“标记”,“群组中的粉丝”变得不可能,如果不做一些非常讨厌的黑客攻击,会为您的应用添加不需要的代码。

您可以通过将关注者存储为json对象或数组来解决此问题。这将使您的代码更好,并简化操作。它将允许向后续添加元数据。一旦你完成了这个,pro就是一个函数的多态性,在每个实例中单个数据库调用SQL之后,事情变得更容易。但是代码可能会在一点之后变得复杂,并且可扩展性可能是一个问题。想想拥有数千名粉丝的用户。

DATABASE / JOIN TABLE / MVC MODEL 第二个是SQL解决方案被称为连接表,这有一个最小的缺点,如为每个操作进行数据库调用会减慢速度。如果您使用的是MVC,可以稍微修改一下。我建议制作一个多态的模型。

专业人员可以在此表中添加其他信息,例如后续开始或结束的日期。这使您的应用程序更全面。 SQL变得更复杂,但编码更容易。

所有事情都经过调整和平等(在改为JSON之后)你只需要选择编码器或SQLerer。在实际情况发生之前,不要让可伸缩性或性能等因素影响您的决策。但是将CSV存储在数据库中是你不应该做的事情。