Database design 存储RSS提要的最佳数据库结构

Database design 存储RSS提要的最佳数据库结构,database-design,rss,Database Design,Rss,我一直在搜索,试图在这里和谷歌找到答案,虽然我找到了一些指针,但我还没有找到解决方案 如果您有一个带有数据库的简单RSS阅读器,那么您可能有两个用于存储提要的表(忽略此处处理订阅者): 提要(提要id,提要标题, 提要(url) 项目(项目id,提要id, 项目名称、项目内容) 这在大多数情况下都有效,但对于许多网站/基于web的应用程序,您可能会从frontpage获得一个主提要,然后是类别提要,如果您将这两个提要都纳入上述类型的系统中,由于同一帖子出现在多个rss提要中,将有大量复制数据

我一直在搜索,试图在这里和谷歌找到答案,虽然我找到了一些指针,但我还没有找到解决方案

如果您有一个带有数据库的简单RSS阅读器,那么您可能有两个用于存储提要的表(忽略此处处理订阅者):

  • 提要(提要id,提要标题, 提要(url)
  • 项目(项目id,提要id, 项目名称、项目内容)
这在大多数情况下都有效,但对于许多网站/基于web的应用程序,您可能会从frontpage获得一个主提要,然后是类别提要,如果您将这两个提要都纳入上述类型的系统中,由于同一帖子出现在多个rss提要中,将有大量复制数据

我提出的两个选择要么忽略它并接受重复项,要么在提要和项之间使用链接表。但是,这似乎也是一种浪费,因为我正在寻找的80%的提要都没有多个提要可以创建这种复制

有没有更好的方法/我是不是完全错误地看待这件事

更新

多亏了这两个问题的答案,所以共识似乎是节省空间可能不够重要,不值得担心,并且可能会被未知问题(如dbr提到的)所抵消


添加一个链接表或类似的链接表可能会增加处理时间,所以总体来说不值得担心太多。阅读了关于链接内容和删除重复内容的回复后,我有了一些想法,只有当文章不再在RSS提要中时,才能节省空间,但正如Assaf所说,节省空间可能会浪费时间。

我建议您在开发阶段不要尝试优化提要数据的所有可能副本(我想是设计吧)。集中精力让它工作,完成后,如果你做了一些分析,发现如果你在订阅源之间使用链接或共享数据,确实可以节省X%的存储空间,只有在如果X足够大,足以支付优化数据库所需的时间我建议你实施更多这样的adva吗有计划。

正如阿萨夫所说,我不会担心存储来自不同提要的重复文章,至少现在是这样。它所增加的复杂性不会让你节省的几千字节空间受益

我假设,如果你对内容进行sha1哈希,从文章中选择id,其中哈希=$hash,如果存在某个内容,只需拥有一个“article\u content\u id”,如果将文章内容设置为另一行……但是,如果你有两篇文章,该怎么办

id: 1
title: My First Post!
feed: Bobs site
content: Hi!
hash: abc
link: no
content_link_id:

id:2
title: My First Post!
feed: Planet Randompeople Aggregator
content:
hash: abc
content_link_id: 1
…这样做很好,您通过不复制文章节省了3个字节(如果文章较长,显然会更多)

…但是当Bob决定在他的RSS提要中添加广告,将内容从
Hi!
更改为
Hi!

时会发生什么情况?但是,人们会删除所有图像。然后要更新提要项,你必须检查每一行
内容链接\u id
-链接到你正在更新的文章,检查新项是否有与链接到它的文章相同的散列-如果它不同,则必须断开链接并将旧数据复制到链接项,然后将新内容复制到原始项

可能有更简洁的方法可以做到这一点,但我的观点是,这可能会变得非常复杂,而且在非常有限的帖子子集上,您可能只会节省几千字节(假设数据库引擎本身不进行任何压缩)

除此之外,拥有一个包含
提要
的表似乎是明智的,这也是我见过的大多数其他RSS存储数据库处理这个问题的方式