0

我正在创建一个系统,其中有类似“手动推荐系统”的东西。它的工作原理是这样的:如果用户认为系统内部的某些内容很有趣,它可以“推荐”该内容。然后,此内容将被推荐给所有用户的关注者(他们将出现在他们的“墙”中)。(我不关心谁访问了或任何类型的自动化,对我来说,用户能够通过单击按钮来分享评论很重要)。

假设我关注的用户推荐了一篇博文,这篇博文的链接将出现在我的“墙”中。此链接包含帖子标题、描述等。他还可以推荐视频、照片和用户资料等。

对于每一种推荐的内容,我都会有不同的布局和显示不同的信息,这就是我的问题所在:

我在创建该方法时遇到了一些问题,因此请解决此问题:如何跟踪推荐的内容,保持信息更新(如果帖子标题已更改,则应在推荐中更改)并保持我的解决方案干净?

这些是我所采用的方法以及我不喜欢它们的原因:

  • 创建一个名为“推荐”的“常规”表。这将具有推荐标题、推荐信息_1、推荐信息_2、推荐信息_3、...、推荐信息_N。这是一种很好的方法,因为它很容易检索,并且所有推荐类型都可以使用相同的列。我不喜欢它,因为它不能保持信息更新(这样做有点复杂,每次更新对象时我都必须检查可能的建议)而且看起来很乱。

  • 创建推荐表和“值对表”。推荐表将具有所有推荐类型共有的字段,键值表将具有每种推荐类型的特定信息。我不喜欢它,因为它在维护更新的字段时也有同样的问题,第二张表对我来说看起来很乱,而且执行查询来一次检索各种建议也不会那么简单。

  • 创建仅包含推荐 ID、推荐类型和内容 ID 的推荐表。表格看起来更干净,这是一个加分点,它还解决了更新信息的问题。这里的问题是:我担心检索查询会很复杂,我将不得不执行 N 个“外连接”,因为我拥有的内容类型的数量和我的 select 子句由于种类不同而增长很快来自不同内容类型的信息。

你有什么想法/文章/设计模式可以帮助我吗?

ps:我不知道这是否重要,但我使用的是asp.net和msssql

4

1 回答 1

1

因此,您的用户可以推荐照片、视频、汽车、香蕉等。制作一张列出所有这些内容的表格。因此,用户可能推荐的所有项目都在ThingorObject表中,并附有关于它是什么类型的信息以及附加信息在哪里的信息。

当用户推荐事物时,您只需在用户和事物之间创建关系。因此,该Recommendation表将具有 userId、thingId 和可能的时间戳,以指示何时推荐该事物。

在您的程序中,您将使用子类 Photo、Video、Car、Banana 创建一个超类 Thing。也许你所有的东西都实现了一些接口,这样thing.getName()不管是什么东西你都可以调用。

于 2012-11-15T11:58:37.077 回答