작업중 인 프로젝트와 동일한 문제가 발생했습니다. 제 경우의 해결책은 remote_id라는 로컬 테이블에 추가 nullable 필드를 만드는 것이 었습니다. remote_id가 null 인 경우 로컬에서 원격 데이터베이스로 레코드를 동기화 할 때이 행은 동기화 된 적이 없으며 원격 행 ID와 일치하는 고유 ID를 리턴해야합니다.
Local Table Remote Table
_id (used locally)
remote_id ------------- id
name ------------- name
클라이언트 응용 프로그램에서 _id 필드로 테이블을 연결하고 원격으로 원격 id 필드를 사용하여 데이터를 가져오고 조인 등을 수행합니다.
로컬 예 :
Local Client Table Local ClientType Table Local ClientType
_id
remote_id
_id -------------------- client_id
remote_id client_type_id -------------- _id
remote_id
name name name
원격 예 :
Remote Client Table Remote ClientType Table Remote ClientType
id -------------------- client_id
client_type_id -------------- id
name name name
client_type 테이블이 로컬 또는 원격 테이블의 실제 ID와 일치하지 않을 수 있기 때문에 remote_id가 생성 될 때마다 클라이언트 응용 프로그램에 신호를 반환하므로이 시나리오와 코드에 논리가 없으면 데이터 무결성 오류가 발생합니다. 로컬 _id 필드를 업데이트하도록 요청하면 영향을받는 테이블을 업데이트하는 sqlite에서 이전에 생성 된 트리거가 실행됩니다.
http://www.sqlite.org/lang_createtrigger.html
1- remote_id가 서버에서 생성됩니다
2- 클라이언트에게 신호를 반환
3- 클라이언트는 _id 필드를 업데이트하고 로컬 _id를 조인하는 로컬 테이블을 업데이트하는 트리거를 발생시킵니다.
물론 last_updated 필드를 사용하여 동기화를 돕고 중복 된 동기화를 피합니다.