2010-09-28 16 views
0

Je veux faire une entité CoreData appelée "Employés", certains "Employés" pourraient avoir un gestionnaire de ligne (ou un boss).CoreData - Comment faire qu'une entité impose des relations parent-enfant avec elle-même?

En pseducode de base, il pourrait être décrit comme:

emp_id (PRIMARY KEY) 
emp_name 
emp_parent_id (INT *but optional as some people may not have line managers*) 

Un autre exemple que je pourrais utiliser est « articles » un article pourrait avoir un parent « article », bien sûr pas tous les articles ont un article parent. Le problème que j'ai, c'est, je ne suis pas sûr comment représenter cela dans les données de base, ou même si elle peut gérer de telles choses. Dans le fabricant Core Data Model, je crée une entité appelée "Employee" et ensuite crée une relation qui pointe sur elle-même avec optionnel checked et vérifie qu'il n'y a pas de suppressions en cascade, ou pas de relation inverse. Je ne suis pas sûr si c'est la bonne manière de le faire cependant. Puis-je faire en sorte qu'une entité de base de données se considère comme un parent optionnel?

Merci.

Répondre

3

Bien sûr, vous pouvez. Mais vous devez également ajouter la relation inverse, de sorte que vous pouvez trouver tous les employés dont un gestionnaire est gestionnaire.

Votre entité employé devrait ressembler un peu comme ceci:

  • Relationship manager: to-one, en option, inverse: managedEmployees
  • Relation managedEmployees: à plusieurs, en option, inverse: gestionnaire
+0

Oui, je suis d'accord; il m'a donné un avertissement si j'ai essayé de faire une relation de parent sans un inverse. – zardon

+0

Comment faites-vous relation to-many, chaque fois que je l'essaie, il continue à faire une relation Many-to-Many? Pic: http://img824.imageshack.us/img824/3780/parentchild.png – zardon

+0

Vous devez ajouter ** deux ** relations. Vous venez de définir * parent_emp * pour être sa propre relation inverse. Cela n'a pas de sens pour ça. Vous devriez aussi vraiment penser à la façon dont vous nommez vos attributs et vos relations. la manière habituelle est d'utiliser CamelCase et pas de soulignement pour séparer les mots. – Sven

0

J'ai été capable de faire une version de base avec NSLog. Bien que j'apprenne toujours les bases des données de base.

@Sven - Je ne peux pas forcer la relation to-many, elle me donne toujours beaucoup-à-plusieurs. Donc, pour l'instant, j'utilise juste une relation 1-à-1.

+0

Peut-être une image aide: http://yfrog.com/j8parentchilddonerightp – Sven

+0

Merci, cela a aidé. J'ai été capable de reproduire votre image dans xcode: http://img535.imageshack.us/img535/8409/parentchild2.png – zardon