Database 这样设计标签表有什么好处?什么时候这样做比较好?

Database 这样设计标签表有什么好处?什么时候这样做比较好?,database,database-design,normalization,Database,Database Design,Normalization,我在读这篇文章:作者写了一些关于标签和posts标签表的特别内容: 标签-好的,是时候把要点吹出来了。 StackOverflow将每个问题限制为五个标签(答案不是 标记),所有五个都存储在此字段中。比如说, 问题305223,标签字段为 “”。这取决于你 使之正常化。Sam Saffron的SoSlow实用程序自动创建 标记和PostsTags表来规范这些。接下来,检查内容 小心地打开标记字段。StackOverflow允许标记中有句点, 例如.NET标记和ASP.NET标记。但是,在数据库中

我在读这篇文章:作者写了一些关于标签和posts标签表的特别内容:

标签-好的,是时候把要点吹出来了。 StackOverflow将每个问题限制为五个标签(答案不是 标记),所有五个都存储在此字段中。比如说, 问题305223,标签字段为 “
”。这取决于你 使之正常化。Sam Saffron的SoSlow实用程序自动创建 标记和PostsTags表来规范这些。接下来,检查内容 小心地打开标记字段。StackOverflow允许标记中有句点, 例如.NET标记和ASP.NET标记。但是,在数据库中,这些是 存储为“aspnet”。只是一些需要注意的事情

我想了解的是,通过这种方式制作标签表并将其绑定到帖子,我们可以获得哪些真正的好处

更新:我想问的是,在同一个Post记录中,标签保存为字符串,然后在Post上有一个外部工具循环,并将标签复制到标签和PostsTags表。

这称为表-这意味着您不需要加入标签表,所有标签都可以通过Post一次性检索

这样做是出于性能原因——由于数据库中的数据量如此之大,连接成为了一个真正的瓶颈。通过这种方式使标记违反1NF,确保在获取帖子时不需要连接。

这称为表-这意味着您不需要在标记表上进行连接,并且所有标记都可以通过帖子一次性检索


这样做是出于性能原因——由于数据库中的数据量如此之大,连接成为了一个真正的瓶颈。通过这种方式使标记违反1NF,可以确保在获取帖子时不需要连接。

他们这样做是为了获得非规范化表和规范化表的好处

它们将标记保存在带有问题的列中,因此在显示问题时很容易显示。它们不需要与标记或PostTags表联接。从1个问题表中获取所有必要信息。速度

当添加新问题时,同样的方法对于事务处理更好。当使用规范化方法时,您需要将信息保存到如下三个表中

Transaction Begin
  Insert Into Question
  Insert or Update Tags
  Insert or Update PostTags
Transaction Commit.
这将比简单地插入问题表花费更多的时间(可能需要锁定标记、后期处理)。你再次获得速度,但插入。用户感知的网站速度增加。做同样事情的后台进程对用户是不可见的,因此不会影响用户


另一方面,他们正在解析同一列,并将其内容复制到标记和poststag。它带来了什么?首先定期创建新标记,从问题表中查找新标记的速度会很慢。第二个后期将为您提供规范化视图,说明哪些问题与哪些标记相关。很多人只浏览他们感兴趣的标签。因此,提供这些信息至关重要。您又能获得什么速度。

他们这样做是为了同时获得非规范化表和规范化表的好处

它们将标记保存在带有问题的列中,因此在显示问题时很容易显示。它们不需要与标记或PostTags表联接。从1个问题表中获取所有必要信息。速度

当添加新问题时,同样的方法对于事务处理更好。当使用规范化方法时,您需要将信息保存到如下三个表中

Transaction Begin
  Insert Into Question
  Insert or Update Tags
  Insert or Update PostTags
Transaction Commit.
这将比简单地插入问题表花费更多的时间(可能需要锁定标记、后期处理)。你再次获得速度,但插入。用户感知的网站速度增加。做同样事情的后台进程对用户是不可见的,因此不会影响用户


另一方面,他们正在解析同一列,并将其内容复制到标记和poststag。它带来了什么?首先定期创建新标记,从问题表中查找新标记的速度会很慢。第二个后期将为您提供规范化视图,说明哪些问题与哪些标记相关。很多人只浏览他们感兴趣的标签。因此,提供这些信息至关重要。您再次获得了什么速度。

您询问的标签表的具体功能是什么?您询问的标签表的具体功能是什么?