2016-10-31 3 views
0

난 그냥이 가이드 읽기 시작 : https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html#//apple_ref/doc/uid/TP40001075-CH30-SW1코어 데이터 설계 원칙

을 그리고 그것은 기본적으로 (제 생각에) 두 개의 큰 모순이있다 첫 번째 "하위 클래스를 나타내는 클래스가"- 계승을 상속하는 엔티티에 사용자 정의 클래스를 구현하면 모든 엔티티가 동일한 테이블에 배치됩니다. 참고에 따라 성능 문제가 발생할 수 있습니다.

"맞춤 수퍼 엔티티"를 만드는 데 얼마나 큰 성능 저하가 발생합니까?

+0

당신은 하나의 모순, 두 모순 된 진술을 의미합니다. (그들은 실제로는 아니지만) – philipxy

답변

0

저는이 SQLite 변종에 익숙하지 않지만, 기본 클래스/서브 클래스 관계를 모델링하는 것은 대개 다른 테이블로 수행됩니다. 모든 파생 클래스 (Vehiclea)에 공통된 속성을 포함하는 기본 클래스를 나타내는 하나의 테이블과 해당 하위 클래스 (Cars, Trains, Airplanes)에 고유 한 속성을 포함하는 각 서브 클래스에 대해 다른 테이블이 있습니다.

성능이 다른 테이블에서 표준화 된 엔티티보다 좋거나 나쁘지는 않습니다.

+0

이 질문은 일반적인 경우 또는 일반적으로 어떻게 수행되는지에 관한 질문이 아닙니다. 그것은 CoreData에서 sqlite가 어떻게 사용되는지에 관한 것입니다. – netigger

0

상속 메커니즘을 사용하여 기본 데이터베이스 구조를 얻을 수 있습니다. 귀하의 링크에서 :

비슷한 엔티티가 여러 개인 경우 상위 속성 (상위 엔티티라고도 함)으로 공통 속성을 고려할 수 있습니다.

모순이 없습니다. 문서는 단지 특정 시설을 사용할 때 데이터베이스 구조가 무엇인지를 알려주는 것입니다. (상속을위한 표준 데이터베이스 테이블 관용구입니다.) 엔티티 상속 메커니즘을 사용하면 부모 테이블과 함께 기본 부모 - 자식 클래스 상속 기능이 자동으로 선언되고 구현됩니다. 그렇지 않으면 직접 부모 - 자식 클래스 상속 선언 및 구현을 수행합니다. 각각에는 특정 성능 및 기타 특성이 있습니다.

디자인 사이의 비용을 절충하고를 통해 여러 차원 혜택을 포함한다. "성능"자체는 여러 차원을 포함하며 주어진 응용 프로그램 사용 패턴 이외의 의미는 없습니다. 여기에서 관련된 다른 차원에는 건설 및 유지 보수의 복잡성이 포함됩니다.

부모로서 엔티티에 대해 충분히 자주 질의하는 경우 모든 부모 데이터를 고유 한 테이블에 저장하는 것이 좋습니다. 그러나 주어진 하위 유형에 대해 쿼리하는 동안 상위 데이터를 요구하는 경우가 거의 없거나 하위 및 상위 데이터가 모두 자주 필요하면 하위 테이블 또는 테이블에 상위 데이터 만 갖는 것이 좋습니다. 그러나 각 디자인은 다른 종류의 쿼리에서 성능이 떨어집니다.

+0

글쎄, 여기에서는 "부모 테이블"이라고 말합니다. 그러나 부모 테이블은 존재하지 않을 것입니다. "자식 타입"과 "부모 타입"은 하나의 테이블에 있습니다. "다른 엔티티에서 상속 한 모든 엔티티는 같은 테이블에 존재합니다". 또한 데이터베이스를 탐색하면 내 프로젝트에서 로컬로 확인할 수 있습니다. – netigger

+0

감사합니다. 내 대답을 업데이트 할게. 일반적으로 하나의 테이블은 모든 엔티티의 모든 속성을 열로, 적용 할 수없는 항목을 null로 나타냅니다. 확인 할수 있어요? 물론, 그것은 내 요점에 영향을 미치지 않는다. 예를 들어 부모 테이블과 자식 테이블을 원한다면 그것은 손으로합니다. – philipxy

+0

무슨 뜻인지 모르겠습니다. "손으로"? 테이블을 수정할 수 없으면 CoreData가 고장납니다. – netigger