| 

.NET C# Java Javascript Exception

5
Ich habe zwei Arten von Entitäten, nennen wir sie A und B, die jeweils über eine eindeutige ID verfügen, ansonsten aber verschiedene Felder aufweisen.

Nun besteht die Möglichkeit, dass eine Entität an Hand der ID gesucht werden soll - und zwar egal, ob es sich um eine Entität von Typ A oder B handelt: Wird ein Eintrag vom Typ A mit passender ID gefunden, wird dieser zurückgegeben, ist er vom Typ B, dann eben jener.

Sprich: Die Query, der nur eine ID übergeben wird, kann A oder B zurückliefern.

Nun stellt sich mir die Frage, wie ich das organisiere: Beide Typen in eine Collection, oder getrennte Collections?

Für eine Collection spricht, dass nur eine Abfrage benötigt wird, und A und B nachher problemlos unterschieden werden können. Dagegen spricht, dass es ein wenig schwer ist, das Ganze mit einem Objektmapper wie beispielsweise Mongoose.js abzubilden, da dieser davon ausgeht, dass pro Collection nur ein Typ vorhanden ist.

Wie löst man das am geschicktesten, sprich sauber und zugleich performant?
News:
25.07.2011
Golo Roden 2,5k 2 9
1 Antwort
2
Hallo Golo Roden,

ich habe einen mongoDB Adapter für das Zend Framework entwickelt, da ich die Datenbank in Zukunft verstärkt in meinen Projekten einsetzen will.
Auf jeden Fall stehst du vor einer grundlegenden Problematik. Nur weil mongoDB an sich schemalos arbeitet, entbindet einen das nicht von der Aufgabe, ein Schema für seine Daten zu definieren.
Ein richtig oder falsch gibt es in deinem Fall aber nicht. Am schnellsten ist deine 1. Variante, da du eine mongoDB Abfrage immer nur an eine Collection richten kannst. Vermutest du deine Entität in unterschiedlichen Collections, kommst du nicht umher, auch zwei Abfragen an die Datenbank zu richten.
Ob es sauber ist, hängt von dir bzw. deiner Applikation ab. Gehören A und B logisch zusammen, spricht nichts dagegen, diese auch in eine Collection zu speichern, deine Anwendung muss nur damit umgehen könnnen.
Ich kenne Mongoose.js nicht. In deinem Fall würde ich eine Ebene zwischenschalten, die das Ergebnis der Abfrage entgegennimmt und je nach Entität ein Objekt vom Typ A oder B zurückgibt. Quasi eine Factory-Klasse oder Ähnliches.
26.07.2011
codeliner 73 4
Das mit der Factory-Klasse ist eine gute Idee, danke :-)

Mongoose.js ist - obwohl für MongoDB gedacht - dem Gedanken eines Schema verhaftet. Gefällt mir nicht so wirklich ... zwar gibt es den Schematyp "Mixed", mit dem man auch verschiedene Schemas abbilden kann, aber irgendwie hat das was von "von hinten durch die Brust ins Auge" ...

Von daher - das mit der Factory, so mach ich's! Danke :-)!
Golo Roden 26.07.2011

Stelle deine Datenbank-Frage jetzt!