2011-12-22 31 views
5

Hoàn toàn mới với Dữ liệu cốt lõi, tôi đang tạo mô hình dữ liệu của mình. Tôi có 33 thực thể, và một vài mối quan hệ khó khăn giữa họ nhưng rất nhiều mối quan hệ nước ngoài.Cách thể hiện mối quan hệ khóa ngoại trong Dữ liệu cốt lõi - Mô hình dữ liệu trong XCode

Làm cách nào để quản lý các mối quan hệ đó không chính xác là 1 hoặc nhiều hoặc nhiều hoặc nhiều mà là các khóa ngoại trong Mô hình dữ liệu chính?

Ví dụ, tôi có một thực thể liên hệ, có mối quan hệ với contact_x_mail và đồng thời contact_x_mail có mối quan hệ với Thư, chứa tất cả email. Mối quan hệ này là 1 hoặc nhiều người. Nhưng có những người khác như Tổ chức giáo dục (một liên hệ có thể có nhiều tổ chức) và Mail, đó không phải là mối quan hệ 1 hoặc nhiều, tổ chức có một ForeignKey_mail_id.

Làm cách nào để thể hiện mối quan hệ khóa ngoại quốc đó? Chỉ mục?

Cảm ơn bạn rất nhiều, hy vọng câu hỏi của tôi là rõ ràng.

+0

Tôi không chắc mình thực sự hiểu. Nếu mối quan hệ không phải là 1-M, M-M, hoặc 1-1 thì nó là gì? – paulbailey

Trả lời

8

Bạn đang nghĩ về CoreData về một DBMS mà nó không phải là. Bạn không cần thiết lập khóa ngoại để tạo mối quan hệ trong CoreData. Nếu bạn muốn chỉ định email cho người dùng, bạn chỉ cần tạo mối quan hệ giữa hai người và bạn có thể đặt thuộc tính "email" của người dùng hoặc thuộc tính "người dùng" của email. ForeignKey và liên kết là tất cả được thực hiện bởi CoreData trong nền.

Ở một điểm khác, mỗi mối quan hệ theo định nghĩa, 1-1, 1- * hoặc -. Tôi không chắc chắn có bất kỳ lựa chọn nào khác ...

Khi bạn tạo mối quan hệ trong CoreData, bạn đang tạo các thuộc tính mới cho mục này một cách hiệu quả. Dưới đây là một ví dụ:

@interface User : NSManagedObject 

#pragma mark - Attributes 
@property (nonatomic, strong) NSString *name; 
@property (nonatomic, strong) NSString *emailAddress; 

#pragma mark - Relationships 
//All to-many relationships are saved as Sets. You can add to the "emails" relationship attribute to add email objects 
@property (nonatomic, strong) NSSet  *emails; 
//All to-one relationships are saved as types of NSManagedObject or the subclass; in this case "Institution" 
@property (nonatomic, strong) Institution *institution; 

Thiết này là đơn giản như:

User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:[self.fetchedResultsController managedObjectContext]]; 
[user setName:@"Matt"]; 
[user setEmailAddress:@"[email protected]"]; 

//...Maybe i need to query my institution 
NSFetchRequest *query = [[NSFetchRequest alloc] initWithEntityName:@"Institution"]; 
    [bcQuery setPredicate:[NSPredicate predicateWithFormat:@"id == %@",  institutionId]]; 
    NSArray *queryResults = [context executeFetchRequest:query error:&error]; 
[user setInstitution:[queryResults objectForId:0]]; 

//Now the user adds a email so i create it like the User one, I add the proper 
//attributes and to set it to the user i can actually set either end of the 
//relationship 
Email *email = ... 
[email setUser:user]; 

//Here i set the user to the email so the email is now in the user's set of emails 
//I could also go the other way and add the email to the set of user instead. 

Hope this helps mọi việc rõ ràng lên một chút! Đọc tài liệu để đảm bảo rằng CoreData phù hợp với bạn!

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/CoreData.pdf

Các vấn đề liên quan