帖子元数据库设计

时间:2010-12-23 03:23:29

标签: sql database normalization

如果您有一个名为posts的表,其中包含id,title,content .etc,您将如何设计数据库表来保存有关每个帖子的元数据,例如:今天,本周等访问了多少次,所以你可以找出本周最受欢迎的帖子。

同时我在这里,索引和内部联接之间有什么区别。我知道这与此Most efficient database design for a blog (posts and comments)问题类似:

我有三个表,post,author_posts和author我使用内部联接来查找x post的作者,帖子包含一个名为author_id的字段,但是我看到一些不包含外键的网站,而是他们做了类似的事情这样:

> post          author_posts    author     
>  id               id, title,     id, post_id,   
>  name, content     author_id     username

哪一个是最快的/你应该使用哪一个?

2 个答案:

答案 0 :(得分:0)

对于这类事情,如果你实时进行计算,你将会被杀死。像这样的用例非常适合非规范化。

答案 1 :(得分:0)

访问次数是一种非常特殊的关于帖子的元数据,其解决方案可能与存储其他类型的元数据不同。

为您网站上的特定资源计算“访问次数”需要做出一些关于“访问”的决定。您是否有登录信息来决定谁在进行访问,或者您只是使用IP地址?经过多长时间会触发同一IP的新访问?

那就是说,你有两个选择。

您可以在每次访问时存储一条记录(包含日期和时间),并在您想知道访问过的人数时计算这些记录。优点是您可以分析任何时间段,并且您可以存储有关访问的额外信息。但是,如果您收到大量访问者并经常进行计算,则可能会导致应用程序出现负载。

或者,您可以计算每个离散时间段内的访问次数。您应该使用您可能想要分析的最短时间段(可能是每个日期的一个计数器,或者可能是每天的每个小时,具体取决于您最终的使用情况)。每个计数器都是表中的一行,包含帖子ID,日期或时间描述符以及整数计数。当您检测到新访问时,只需更新当前时间段的计数器即可。您可能需要保留最近访问详细信息的缓存,以帮助您确定是否有“新”访问或现有访问的延续,但如果访问只是对页面的请求,那么您不需要这样做,只需更新相应的计数器。