Je travaille sur un projet parallèle pour créer un forum construit sur RavenDB. J'essaie actuellement de mettre au point la relation entre les Auteurs de Sujets, et l'utilisateur "Dernière Réponse" sur un sujet. Dans un modèle relationnel typique, je stockerais simplement le FK à l'utilisateur qui a posté le sujet, et je ferais une jointure avec la table des réponses pour obtenir l'auteur des réponses les plus récentes. Ce n'est évidemment pas le cas d'utilisation pour Raven ou n'importe quel magasin de documents d'ailleurs.RavenDB Relational Model
Quelle serait la manière la plus "optimale" de tirer ceci? Actuellement, je suis en train de lancer quelques idées. Enregistrez le FK de l'auteur sur le modèle Topic, ajoutez un objet utilisateur JsonIgnored que je vais remplir sur le sujet en utilisant un include dans ma session load (donc une requête si loin du côté client) , rend juste la charge et le modèle un peu compliqués). Puis éventuellement en utilisant un index map-reduce pour obtenir l'auteur des réponses les plus récentes (ou même la même méthode que pour obtenir l'auteur du sujet, donc 1 ou 2 requêtes en fonction).
Idée 2: Sauvegarde de l'auteur et de la réponse la plus récente Utilisateur sur le modèle. Principal "problème" ici est le potentiel pour les données périmées (dire si un nom d'utilisateur change). Cependant, cela pourrait potentiellement être allégé avec une tâche de fond (ou simplement garder cela à l'esprit lors de la mise à jour d'un document utilisateur et revenir sur tous les messages d'un utilisateur).
Exemple des modèles en question.
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; }
}
Note: Je probablement ajouter une méthode au modèle de l'utilisateur pour retourner une version « propre » où je délogeons des choses comme le PasswordHash et l'utiliser sur Save pour Idea 2. Selon