저는 Windows Mobile에서 실행되는 Compact Framework 응용 프로그램을 만들고 있습니다. 그것은 배달 드라이버에 의해 그들에게 다음 직업을 알리고 지출 등을 추적하는 데 사용됩니다. 모바일 장치 및 서버의 SQL Server에 SQL CE 데이터베이스가 있습니다. Sync Framework의 주요 성능 및 구성 문제로 어려움을 겪은 후에 WCF를 사용하여 자체 동기화 코드를 작성했습니다. 이것은 잘 작동하며 Sync Framework보다 훨씬 빠르지 만 더 빨리 처리하도록 요청 받았습니다. 이제 문제의 세부 사항을 살펴 보겠습니다. 바라기를 나는 이것을 분명히 설명 할 수있다.데이터베이스 및 응용 프로그램 디자인 - 제약 조건 제거?
동기화는 한 번에 한 테이블 씩 작동하며 단방향입니다. 업데이트는 서버에서 PDA로만 전송됩니다. 서버로 돌아가는 데이터는 완전히 다른 방식으로 처리됩니다. 먼저 서버에서 제거 된 PDA의 모든 레코드를 삭제합니다. 데이터베이스 제약 때문에 '부모'테이블에서 삭제하기 전에 '하위'테이블에서 삭제해야하므로 아래쪽에서 영안을 정리합니다. E.G. 제품 테이블에서 삭제하기 전에 송장 테이블에서 레코드를 삭제합니다.
다음으로 서버에 추가 된 PDA에 새 레코드를 추가합니다. 이 경우 먼저 부모 테이블을 업데이트하고 나중에 하위 테이블을 업데이트해야합니다.
내 상사는 배송 드라이버가 invoiceProduct 테이블 만 필요로 할 때 내 앱이 서버와 동기화 된 제품 테이블과 같은 대형 테이블을 유지한다는 사실을 좋아하지 않습니다. invoiceProduct 테이블은 송장과 제품 테이블을 함께 연결하며 제품에 대한 일부 정보를 포함합니다. 나는 그들의 데이터베이스 디자인이 정규화되지 않았고 제품 이름이 중복되어 invoiceProduct 테이블과 product 테이블에 저장되었다는 것을 의미합니다. 물론 우리 모두는 이것이 열악한 디자인이라는 것을 알고 있지만 이러한 상황에서 성능을 향상시키기 위해이 작업을 수행 한 것으로 보입니다.
분명한 해결책은 PDA 데이터베이스에서 제품 테이블을 완전히 제거하는 것입니다. 그러나 때때로 필요하기 때문에 나는 이것을 할 수 없다. 운전자는 인보이스에 신제품을 즉시 추가 할 수 있습니다. 상사는 대용량 테이블을 가끔씩 또는 제품을 추가하려고 시도 할 때 동기화 할 수 있다고 제안합니다. 이것은 현재 설계에서 작동하지 않습니다. 왜냐하면 PDA에없는 신제품을 포함하는 인보이스가 다운로드되면 데이터베이스 외부 키 오류가 발생합니다.
큰 메시지를 게시하는 것에 대해 죄송합니다. 바라건대 그것은 의미가 있습니다. 내 데이터베이스 제약 조건을 제거하고 좋은 데이터 구조를 엉망으로 만들고 싶지 않습니다. (
왜 제품 테이블을 동기화 할 수 없습니까? –
... 그리고 제품 테이블 (일부 열만)의 일부만 가지고있을 수 있습니까? –