2012-03-29 8 views
0

Können sagen, ich die folgende Art von seltsamen Kerndatenschema haben:Kerndaten: Gibt es eine Möglichkeit, ein Modell mithilfe implizierter Beziehungen anstelle von echten effizient abzufragen?

enter image description here

In diesem Modell gibt es Konten und Tätigkeiten, die eine übergeordnete Entität von Artikel teilen. Darüber hinaus gibt es eine Beziehungsentität, die die Beziehungen zwischen Objekten modelliert, anstatt Kerndaten die Beziehungen mithilfe "realer" Beziehungen modellieren zu lassen. Mit anderen Worten, die Entität "Beziehung" wird als eine Art "Verknüpfungstabelle" verwendet.

Wie kann ich anhand dieses Modells Objekte basierend auf verwandten Objekten abrufen? Zum Beispiel, Wie würde ich alle Konten abrufen, die eine Aktivität haben, die heute auftritt?

Es scheint keine Möglichkeit zu geben, dies in einer einzigen Abrufanforderung zu tun. Das Beste, was mir bisher einfällt, ist, zuerst die Aktivitäten zu holen, die heute stattfinden, dann die Beziehungen, in denen die toId mit den IDs dieser Aktivitäten übereinstimmt, und schließlich die Konten, bei denen die ID der fromId in den Beziehungen entspricht.

3 Abrufanforderungen, um dies zu tun, ist suboptimal. Wir müssen die Konto- und Aktivitätszahlen in den Hunderttausenden unterstützen und all das Abrufen wird möglicherweise sehr langsam sein. Es ist auch peinlich, NSFetchedResultsController mit dieser Art von Modell zu verwenden.

Ja, ich weiß, dass Core Data nicht gerne Dinge macht, aber aus einer Vielzahl von Gründen, die unsere Serverarchitektur und Cross-Plattform-Unterstützung betreffen, würden wir dieses Datenmodell und Core Data wegen all der schönen Dinge gerne benutzen es bietet. Vielen Dank im Voraus für Ihre Hilfe.

Antwort

0

Geben Sie sowohl Account als auch Activity eine Beziehung zu Relation, dh. genannt relations, und geeignete inverse Beziehungen (genannt account/activity). So können alle Ihre Artikel, einschließlich Account und Activity mehrere "Relation" s haben.

Um ein Konto zu einer Aktivität zu verknüpfen, erstellen Sie ein neues Relation Objekt und legen Sie seine account und activity Eigenschaft, fügen Sie es dann an den relations Satz sowohl das Konto und die Aktivität.

Wenn Sie jetzt alle Konten abrufen möchten, die eine Aktivität aufweisen, rufen Sie die relations-Eigenschaft Ihrer Aktivität ab und rufen für alle Elemente in dieser Gruppe die account-Eigenschaft ab. Es sollte möglich sein, dies in eine einzige Abfrage zu integrieren.

Verwandte Themen