您如何管理特定对象的列表。例如。用户对特定对象的评论(用户帖子等)

Neh*_*ogi 4 database-design

我是数据库和 Web 应用程序开发的新手。我想知道如何在数据库中存储特定对象的列表。例如,用户对特定帖子(对象)的评论,或特定用户的朋友或关注者列表。

通常我们以行的形式保存数据

|user_id  | user_name | use_password | etc | etc
|123      | neha      | 123          | ... | ...
Run Code Online (Sandbox Code Playgroud)

但在这里你不能将它们保存在行中,因为它是一个列表:

|post_142524 | comment1 | comment2 | comment3 | etc...
Run Code Online (Sandbox Code Playgroud)

你如何存储评论?我想不出为每条评论创建新列。我无法创建一个像这样按列存储数据的表:

|post_142524|
|comment1   |
|comment2   |
|comment3   |
|comment4   |
|comment5   |
etc...
Run Code Online (Sandbox Code Playgroud)

我想知道如何管理特定对象的列表。我四处搜索,但我认为我的搜索词并不完美,无法得到我想要的东西,因为我什至不知道用什么词来搜索这个问题。任何帮助,将不胜感激!

Lei*_*fel 7

正如评论所示,您需要了解规范化。没有太多理论,当您想要数据库中特定对象的列表时,这里有一些可能性:

  • 为每个附加列表项创建一个新列。 如果您的列表的具体长度很小,这可能是一个可行的选择,但是对于大多数列表,今天的n项明天将变为n+1,并且您的表开始具有难以管理的列数,需要额外的编码来连接和过滤。

  • 为每个附加列表创建一个新表。 如果列表是独立的,那么这是可行的方法,但是,如果列表相同,则为每个对象创建和维护新的列表变得难以管理。此外,跨对象的查询需要在多个表上使用 UNION。这些查询可能会变得冗长,并且必须随着每个附加对象进行修改。

  • 为这种类型的列表创建一个规范化的表。 如果每个对象的列表结构都相同,则可以使用单个表为任意数量的对象存储任意数量的列表项。应定义表定义并确定范围。

对于您的特定问题,您已将列表项定义为评论,因此您只需要额外的列来指示它与什么对象(帖子?)以及它是什么评论编号。您可能还希望有列指示评论的作者、评论的时间以及评论的来源。

这是它的外观:

Post    CommentNumber  Comment                                     
------  -------------  --------------------------
098763  1              Comment 1 for post 098763.
...  
142525  1              Comment 1 for post 142525.
142525  2              Comment 2 for post 142525.
...
200526  1              Comment 1 for post 200526.
Run Code Online (Sandbox Code Playgroud)