출처 : http://warmz.tistory.com/805
참고::
http://brandontreb.com/core-data-quicktip-inverse-relationships/
Inverse라는 속성에 대해 알기 전 Database에서 Relationship이라는 것이 무엇인지부터 파악해 볼 필요가 있다.
Relationship in Database
Database에서 관계(Relationship)이란 두 개의 Entity나 그 자신과의 특정 관계를 양방향으로 표현하는 수단이다. 현재의 관계나 장래 유용한 관계만을 한정적으로 표시하는데 각 방향의 관계에는 반드시 아래 사항들을 명시해야 한다.
1. 관계 명칭 2. 선택 사양(Optionality) 3. 관계형태 (Degree) |
* 모든 Entity1은 [단 하나씩 / 하나이상] 의 Entity2를(에) [반드시 관계명 해야한다 / 관계명 일 수도 있다.]
- 관계명은 구체적이어야 한다. - 주는 쪽(One) : 특정 집합만 관계를 가질 때는 해당 집합을 표현하는 것이 좋다. - 받는 쪽(One or Many) : 최대한 관계 내용을 구체적으로 표현하는 것이 좋다. |
Relationship 표현
1. 두 Entity 사이에 선을 그린다. 2. 관계명칭을 기록한다. 3. 선택 사양(Optionality)를 표시한다. 점선 : 선택적(~ 일 수도 있다.) 실선 : 무조건(반드시 ~ 해야한다.) 4. 관계 형태(Degree)를 표시한다. 실선 하나 : 단 하나씩(one and only one) 실선 한 가닥에 여러 실선이 연결 : 하나 이상(one or more) |
Relationship Read
1. 먼저 한 방향(좌 ➝ 우)을 읽고 2. 다른 방향 (우 ← 좌)을 읽는다. |
Inverse Relationship in Core Data
코어 데이터에서도 Relationship은 크게 다르지 않다. 그러나 Inverse(역전)라는 기능을 제공하고 있는데 이 것은 두 개의 Entity가 관계되어 있을때 만약 Entity1가 변경된다면 관계되어 있는 Entity2의 내용도 그에 맞게 변경되게 해주는 역할을 한다. Apple 개발자 문서에 따르면 Core Data framework는 각 Entity들의 Relationships를 통해 유기적인 연결을 더욱 강하게 만들어준다고 한다.
Relationships의 Inverse 옵션
Entity간의 Relationship
예를 보자. 위 그림을 보면 Role(역할)이라는 Entity와 Person(사람)이라는 Entity는 서로 관계(1:n)를 맺고 있다. 이것이 의미하는 것은 하나의 역할은 다수의 사람을 소유할 수 있고, 한 명의 사람은 반드시 하나의 역할만을 가지고 있다라는 것이다. 이 관계는 만약 역할명(Role - name)이 변경되면 그 역할을 가지고 있는 사람의 역할명도 변경되어야 한다는 무결성을 지켜야한다. 코드로 나타내보면 아래와 같다.
1 2 3 4 5 6 7 8 9 | Role *role = [[Role alloc ] init]; Person *john = [[Person alloc ] init]; // 해당 역할을 맡을 사람 추가 [role addPersonObject:john]; // Inverse 옵션을 통해 자동으로 추가되는 코드. // 각 사람은 단 하나의 역할만을 맡는다. [john setRole:role]; |
Inverse 옵션을 사용하면 바로 역전 관계가 성립되면서 유기적인 연결이 이루어진다. 반대로도 마찬가지다. 결국 하나가 변경되면 연결되어 있는 다른 나머지 하나도 그에 맞게 변경된다. 개발자가 신경써야할 부분이 자동적으로 줄어든다는 것이다.
두 개의 Entity간의 관계
'프로그래밍 > iOS' 카테고리의 다른 글
XCode4 code 를 XCode5로 컨버팅하기 (0) | 2014.02.11 |
---|---|
[Core Data] Core Data Version Up 후 LightWeight Migration 하기 (1) | 2013.07.21 |
[CoreData] Relationship에 관한 Tip - 연관된 Entity 함께 지우기 (0) | 2013.07.21 |
Objective-C에 새로 추가된 NSDictionary, NSArray, NSNumber 리터럴(literal) 표기법 (0) | 2013.07.12 |
iOS에서 OpenCV 사용하기 (1) | 2013.07.02 |