【发布时间】:2016-06-12 16:25:59
【问题描述】:
我正在做一个业余项目,以创建一个基于 RavenDB 的论坛。我目前正在尝试确定主题作者与某个主题的“最后回复”用户之间的关系。在典型的关系模型中,我只需将 FK 存储给发布主题的用户,并连接到回复表以获取最新回复作者。这显然不是 Raven 或任何文档存储的用例。
实现这一目标的最“最佳”方式是什么?目前我正在折腾几个想法。
想法 1: 将作者的 FK 保存在主题模型上,添加一个 JsonIgnored User 对象,我将通过在我的会话加载中使用包含来填充主题加载(因此,到目前为止,客户端的一个请求只是使加载本身和模型有点复杂)。然后可能使用 map-reduce 索引来获取最近的回复作者(或者甚至与获取主题作者的方法相同,因此需要 1 或 2 个查询)。
想法 2: 在模型上保存作者和最近回复的用户。这里的主要“问题”是陈旧数据的可能性(比如用户名更改)。然而,这可能会通过后台任务得到缓解(或者在更新用户文档并返回用户的所有帖子时牢记这一点)。
相关模型的示例。
public class User
{
public string Id { get; set; }
public string UserName { get; set; }
public string PasswordHash { get; set; }
}
public class Topic
{
public string Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
// Idea 1 Relationships
public string AuthorId { get; set; }
[JsonIgnore]
public User Author { get; set; } // Would need to be populated on loads from an Include on AuthorId
public string MostRecentReplyUserId { get; set; }
[JsonIgnore]
public User MostRecentReplyUser { get; set; } // Same as Author
// Idea 2 Relationships
public User Author { get; set; }
public User MostRecentReplyUser { get; set; }
}
注意:我可能会在 User 模型中添加一个方法来返回一个“干净”的版本,在该版本中我会清除 PasswordHash 之类的内容并将其用于 Save for Idea 2。
【问题讨论】:
标签: c# relationship ravendb forum document-database