Wie implementiere ich Denormalized References in RavenDB?

8

Ich hätte gerne einen Verweis zwischen zwei Entitäten, die in der RavenDB-Dokumentendatenbank gespeichert sind. Da dies keine relationale db ist, weiß ich, dass ich die Denormized Reference-Technik verwenden sollte, die in der RavenDB-Dokumentation beschrieben wird. Während dies zunächst gut zu sein scheint, fühlt sich die Bemühung, all diese Referenzen auf dem neuesten Stand zu halten, als unverhältnismäßig an, sobald ich anfange, eine echte "Hierarchiestufe" mit bidirektionalen Referenzen zu schaffen. Ich denke, ich könnte irgendwo falsch liegen.

Können Sie den besten / einfachsten Weg erklären, eine relativ komplexe Domänenhierarchie mit RavenDB zu modellieren?

Danke

    
code mariner 08.05.2012, 09:56
quelle

1 Antwort

6

Ich bin mir nicht sicher, ob dies weit genug gehen wird, um Ihre Frage zu beantworten, aber hier geht es darum, eine denormalisierte Referenz in RavenDB zu erstellen (diese wird aus echtem Code entnommen, wobei nicht wesentliche Elemente zur besseren Übersicht entfernt werden)

Domäne

%Vor%

Sie können sehen, dass ich eine Klasse Assessment habe, die auf ein User verweist. Diese Benutzerreferenz wird mithilfe der Klasse UserReference verwaltet.

Denormalisierte Referenz

%Vor%

Beachten Sie, dass die Referenzklasse auch UserName enthält. Dieser Wert ändert sich nicht sehr oft, aber er kann sich ändern. Deshalb müssen wir die Eigenschaft UserName in der Eigenschaft UserReference in der Klasse Assessment aktualisieren. Um die Änderung vorzunehmen, müssen wir zuerst die korrekten Assessment Instanzen von RavenDB finden und dafür benötigen wir einen Index.

Raven-Index

%Vor%

Dieser Index muss immer aufgerufen werden, wenn der Wert User UserName aktualisiert wird. Ich habe eine UserService -Klasse, die mir hilft, alle meine benutzerbezogenen Funktionen zu koordinieren, daher stelle ich diesen Code dort ein.

Ich verwende diesen Code für andere Referenzen, so dass er etwas abstrahiert wurde. Dies kann Ihnen dabei helfen, komplexere Hierarchien (oder vielleicht eine bessere Beschreibung) zu erstellen.

UserService

%Vor%

Das ist es. Und weißt du, jetzt, wo ich alles verraten habe, kann ich sehen, was du meinst. Es ist viel Arbeit, nur um eine Referenz zu aktualisieren. Vielleicht kann der Dienstcode DRYer gemacht und für verschiedene Beziehungstypen wiederverwendet werden, aber ich sehe nicht, wie man vom Schreiben zahlreicher Indizes, einer pro referenziertem Typ, wegkommt.

    
biofractal 08.05.2012, 10:23
quelle

Tags und Links