2012-12-18 2 views
0

관계형 데이터베이스와 정확히 똑같이 CoreData 객체를 모델링하는 것이 가장 좋은 방법입니까? 나는 CoreData가 관계형 데이터베이스가 아니라는 것을 알고있다.SQL과 같은 CoreData 객체 모델

Business 
Building (Business has many locations; relationship) 
Location (building has a location relationship) 
Coord (Locations has a lat/long coord) 
Worker (work has relationship to business and to location) 

이 고장의 대부분이인가 :

그래서 나는 다음과 같은 오브젝트를 할 것이다 (나는 관계에서 ID 필드를하지 말았어야 알고)? 작업자가있는 것이 좋으며 작업 주소 속성과 비즈니스 속성이 있습니까? 건물에는 위치와의 관계보다는 주소, 도시, 주, 우편 필드가 있어야합니까?

답변

1

여기서 한가지 지침 원리는 오류가 메모리 사용을 의미하지 않는다는 것입니다. 이는 대개 매우 바람직합니다 (사실, 핵심 데이터를 사용하는 주된 이유 중 하나입니다). 위치 관계가있는 건물은 건물을로드하기 위해 위치 정보를로드 할 필요가 없음을 의미합니다. 대신에 우리가 잘못해서 실제로 필요한 경우에만 위치 정보를 가져옵니다.

그러나 반대의 고려 사항도 적용됩니다. 모델을 지나치게 표준화하려는 유혹에 저항해야합니다. 이것은 SQL 데이터베이스가 아닙니다. 관계 란 별도의로드 단계없이 데이터를 가져올 수 없음을 의미합니다. 그것은 오버 헤드와 시간이 필요합니다. 따라서 개체에 액세스 할 때마다 액세스하려고하는 단일 사실이있는 경우 에 개체가로드되어 있어야합니다.

귀하의 경우에 나는 당신이 지나치게 표준화되었다고 말하고 싶습니다. 예를 들어, 좌표로 매우 흥미로운 것을하려고하지 않는다면, 왜 좌표가 위치의 일부가되어서는 안되는지 나는 알지 못합니다. 그리고 당신이 별도의 객체로서 어떤 위치를 수행하지 않는다면, 나는 건물이 단지 주소를 가지고 있지 않은 이유를 알지 못합니다.

+0

내가 생각한 것. 고맙습니다. 그것은 표준화하지 않는 별난/더러운 느낌. .. 그것은 나에게 맞았다 고 생각한다. – jdog

+0

글쎄, 당신 자신이 "나는 CoreData가 관계형 데이터베이스가 아니라는 것을 알고있다"고 말했다. 맞습니다. DB가 아닙니다. 그것은 객체 그래프의 개념을 일반화 한 것입니다. 데이터베이스에 대해 배운 모든 것이 여기에 적용되어야하는 이유는 없습니다. – matt

+0

특정 프로젝트 조건에서 사용자 인터페이스의 함수로 그래프를 모델링하는 것은 좋지 않습니다. 많은 예제가 있지만 이것은 기본적인 것입니다 : CoreData 엔티티를 표시하는 UITableView에서, 특히 큰 데이터 세트를 사용하고, 셀에서 사용중인 속성 만 사용하여 엔티티를 모델링하고, 나머지 자식 엔티티에서 사용할 나머지 정보 상세 뷰는 성능을 많이 향상시킬 수 있습니다. – Leonardo