문제

SQLITE 데이터베이스에서 핵심 데이터로 코드를 포팅했을 때 문제가 발생합니다.

내가 사용하는 데이터는 기존 데이터베이스에서 제공되므로 각 테이블의 ID (또는 코어 데이터를 사용하고있는 엔티티)를 사용하여 정의 된 모든 관계가 있습니다. 내 문제는 단일 테이블에 대해 쿼리를하고 그 결과를 사용하여 필요한 다른 모든 데이터를 얻기 위해 데이터를 전파하는 데 사용한다는 것입니다.

원래 데이터베이스는 다음과 같습니다.

CREATE TABLE TecAccessPoints (MAC varchar NOT NULL PRIMARY KEY UNIQUE,ZoneID integer NOT NULL,Floor integer);
CREATE TABLE Zones (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,ZoneName varchar NOT NULL,BuildingID integer,ZoneDescription varchar);
CREATE TABLE Buildings (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT,BuildingName varchar NOT NULL,CampusID integer NOT NULL,BuildingDescription varchar,Long float,Lat float);
CREATE TABLE Campuses (ID integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,CampusName varchar NOT NULL,CampusDescription text, Latitude float, Longitude float);

내 원래 SQL 쿼리는 다음과 같습니다.

SELECT DISTINCT Zones.ID, Zones.ZoneName, Buildings.ID, Buildings.BuildingName, Campuses.ID, Campuses.CampusName, Rooms.ID, Rooms.NameNumber, Rooms.Floor 
FROM Zones, TecAccessPoints, Buildings, Campuses, Rooms 
WHERE Campuses.ID = Buildings.CampusID 
   AND Buildings.ID = Zones.BuildingID 
   AND Zones.ID = Rooms.ZoneID 
   AND Zones.ID = TecAccessPoints.ZoneID 
   AND TecAccessPoints.MAC = '%@';

nspredicate (또는 유사한 것)를 사용 하여이 쿼리를 복제 할 수있는 방법이 있습니까? 아니면 먼저 조회를 수행 해야하는 경우가 있습니까?

TecAccessPoints.MAC == '%@'

그런 다음 반환 된 데이터를 사용하여 데이터를 다른 조회하십시오.

Zones.ID == TecAccessPoints.ZoneID

그리고 필요한 모든 결과가 필요할 때까지?

감사

제임스

도움이 되었습니까?

해결책

한 번에 하나의 엔티티 만 가져올 수 있기 때문에 쿼리를 핵심 데이터 술어로 복제 할 수 없습니다. 그러나 이것은 데이터베이스 테이블이 아닌 객체 그래프로 생각하는 것이 훨씬 더 유익 할 수있는 경우 일 수 있습니다. 관계가있는 경우

TecAccessPoints <*-> Zones <*-> Buildings <-> etc.
                           <-*> Rooms

위에 표시된대로 Tecaccesspoints를 쉽게 쿼리 한 다음 코드의 관계를 따르십시오 (예 :

TecAccessPoint *tap;
// fetch tap

Campus *campus = tap.zone.building.campus;
NSSet *rooms = tap.zone.rooms;

관계의 이름이 지정되었다고 가정합니다 zone, building, rooms, 등. 그리고 당신은 적절합니다 NSManagedObject 연관성을 정의하기위한 카테고리 @properties 컴파일러가 불평하지 않도록합니다.

물론 핵심 데이터 아래에서 각각 여러 테이블에 가입하는 일련의 SQL 쿼리를 수행하고 있습니다. 핵심 데이터는이 최소한의 성능을 높이는 데 매우 좋습니다. 그러나 DB 괴짜라면 귀찮게 할 수 있습니다. 그렇다면 원시 SQLITE를 고수해야합니다. 핵심 데이터로 이동한다는 것은 객체 그래프 수준에서 사물에 대해 생각하고 대부분의 구현 세부 사항을 무시할 의향이 있음을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top