2012-03-03 4 views
0

Compte tenu du diagramme de classe suivante: Class DiagramPuis-je créer des relations plusieurs-à-plusieurs dans des documents incorporés dans MongoDB?

Comment dois-je approche qui devrait être collections et qui devraient être intégrées? Puisqu'il existe une relation 1..N entre Play/Scene et Play/Character, j'intégrerais normalement ces documents dans Play. Mais le cas d'utilisation est que j'ai aussi besoin de suivre quels personnages apparaissent dans quelle scène. Est-ce que cela dicterait que Scène et personnage doivent maintenant être leur propre collection ou existe-t-il une meilleure façon de le faire?

Répondre

0

Beaucoup de jeux ont beaucoup de caractères et de scènes et ces personnages ont beaucoup d'apparences dans beaucoup de jeux, c'est ma pensée immédiate sur ce schéma.

Cependant, pour répondre à votre question. Faire beaucoup à beaucoup sur embarqué ne serait pas une bonne idée, probablement inférer une mauvaise idée (peut-être même terrible). Je diviserais les entités communément incluses en tables séparées.

+0

Je pense que vous dites quelque chose de similaire à la réponse ci-dessus. Vous ne voudriez pas que le personnage apparaisse dans plus d'une pièce. Les personnages d'une pièce de théâtre n'appartiendraient qu'à cette pièce. – KevDog

0

Je pense que la réponse courte à votre question principale est non. Vous ne pouvez pas avoir un document incorporé à plusieurs endroits. C'est comme essayer d'avoir un œuf qui est à l'intérieur de deux coquilles simultanément. Dans ma tête, je pense aux relations mongodb comme des oignons (couches = embeds) avec des fils qui se connectent à d'autres oignons (thread = référence). Ce pourrait être une analogie foutue, mais ça marche pour moi. Disons que les personnages - même ceux portant le même nom - sont uniques au jeu dans lequel ils se trouvent. Donc, ceux-ci seraient intégrés. Les scènes ressemblent à un exemple clair de tableau incorporé.

Vous n'auriez jamais une scène apparue dans plusieurs pièces.

L'apparence doit être intégrée dans une scène pour les mêmes raisons que les scènes intégrées dans les pièces. Apparence ferait également référence au personnage. Y a-t-il une apparence qui ne fait pas référence à un personnage? Je ne pense pas, mais pas sûr.

Je ferais comme ça (pseudo-modélisation):

Play { 
    embeds-many Characters 
    embeds-many Scenes } 

Scene { embeds-many Appearances } 

Appearance { references a Character } 

Character { } 

Je pense qu'il est certainement possible de faire référence au personnage de l'apparence, il vous suffit de stocker l'ID du caractère à l'intérieur du Apparence. La prochaine question est de savoir dans quelle langue vous travaillez ... Si vous êtes dans Rails, personnellement, j'aime Mongoid.

+0

Vous ne voudriez pas qu'un personnage apparaisse dans plusieurs pièces. L'apparence d'un personnage serait limitée à un jeu. Même dans l'exemple que vous donnez (Shakespeare), Falstaff est une personne différente dans Henry IV I/II et Merry Wives of Windsor. Non, vous voudriez qu'un personnage n'appartienne qu'à une seule pièce. – KevDog

+0

Peut-être que j'ai mal posé la question, je ne veux pas intégrer un document à deux endroits, je me demandais s'il était possible d'avoir une relation entre deux documents incorporés dans le même document contenant. – KevDog

+0

OK Je vais modifier pour refléter cela. – jcollum

Questions connexes