2010-11-28 4 views
0

J'essaie de configurer un modèle de données hiérarchique avec un conteneur dans Core Data. Voici mon modèle jusqu'à présent:Modélisation de question de données de base Données hiérarchiques avec un conteneur

Container 
1-* rootNodes <Nodes> 

Nodes 
1-1 parentNode <Nodes> 
1-* childNodes <Nodes> 

Cependant, je suis arrivé cette erreur: Container.rootNodes - à-plusieurs ne pas l'inverse: c'est un paramètre avancé (aucun objet ne peut être dans plusieurs destinations pour une relation spécifique)

Alors, je créé une relation inverse sur les nœuds, ainsi:

Nodes 
1-1 parentNode <Nodes> 
1-* childNodes <Nodes> 
*-1 container <Container> 

Cependant, ce n'est pas tout à fait correct. Je ne veux pas que mon conteneur ait une relation avec des nœuds, juste les nœuds de niveau racine. Je suis un peu hésitant à compliquer mon modèle de données trop, mais maintenant je pense que ce peut être nécessaire. Si je déplace un nœud enfant à un niveau racine, je ne veux pas avoir à m'inquiéter des types de casting, etc. Cependant, je comprends que je travaille avec deux ensembles différents. Les nœuds racines et tous les autres nœuds.

Voici mon modèle de données proposé, mais je suis à la recherche d'une meilleure suggestion:

Container 
1-* rootNodes <Nodes> 

Nodes 
1-1 parentNode <Nodes> 
1-* childNodes <Nodes> 

RootNodes : Nodes 
*-1 container <Container> 

Est-ce exact?

Répondre

1

Y a-t-il quelque chose dans le conteneur dont les nœuds n'ont pas besoin? De ce que je vois la seule raison pour Container est que vous pouvez regarder Container comme un point de lancement pour obtenir vos nœuds. Si cela est vrai, vous pouvez supprimer complètement Container et obtenir les Nodes root en utilisant un filtre de prédicat avec un critère de recherche comme "parentNode is NIL".

Le message Relation inverse est juste un avertissement. Le point de vue d'Apple est que toutes les relations doivent avoir un sens inverse et cela vaut la peine d'être pris en considération avant de s'y opposer. Mais ce n'est qu'un avertissement et les choses tourneront toujours bien si vous faites attention. Cet avertissement peut être supprimé si vous choisissez d'aller dans vos paramètres de construction cible en recherchant la section Compilateur de modèle de données (MOMC) - Avertissements. Ensuite, trouvez l'entrée pour "Supprimer les avertissements momc sur les relations inverses manquantes" et cochez la case.

Rob

+0

Merci. C'est vrai - à l'origine je pensais que je devais attacher les nœuds directement au conteneur, cependant, puisque chaque magasin persistant aura seulement un conteneur, je peux supposer que tous les nœuds appartiennent à un seul objet Container. – Donald

+0

Un problème que je prévois avec l'utilisation d'un filtre de prédicat pour obtenir les nœuds est cependant que les filtres doivent être actualisés manuellement, correct? Par exemple, si je déplace un nœud d'un enfant à la racine, alors une requête d'extraction précédente serait périmée et je devrais la refaire, alors que s'il s'agissait d'une relation, elle serait mise à jour automatiquement. Y a-t-il une bonne solution pour cela? – Donald

Questions connexes