我正在使用Windows Mobile上運行的Compact Framework應用程序。它被交付驅動程序用來告訴他們下一份工作和跟蹤支出等。我在移動設備上有SQL CE數據庫,服務器上有SQL Server。在使用Sync Framework解決主要的性能和配置問題後,我最終使用WCF編寫了自己的同步代碼。這個效果很好,比Sync Framework快很多,但我被要求進一步提高速度。現在我們進入問題的細節。希望我能夠清楚地解釋這一點。數據庫和應用程序設計 - 消除約束?
同步一次只能處理一個表,並且只能單向運行。更新僅從服務器發送到PDA。傳回服務器的數據處理方式完全不同。首先,我刪除已經從服務器上刪除的PDA上的任何記錄。由於數據庫的限制,我必須在從'父'表中刪除之前從'子'表中刪除,所以我從底層開始處理這個擴展。例如。從產品表中刪除之前,我從發票表中刪除記錄。
接下來,我將新記錄添加到已添加到服務器上的PDA中。在這種情況下,我必須先更新父表,然後逐步縮小heirachy並更新子表。
問題是,我的老闆不喜歡這樣一個事實,即當交付驅動程序只需要 invoiceProduct表時,我的應用程序將保留一個像產品表一樣的大表,並與服務器同步。 invoiceProduct表將發票和產品錶鏈接在一起,幷包含有關產品的一些信息。我的意思是他們的數據庫設計沒有標準化,產品名稱已被複制並存儲在invoiceProduct表格以及產品表格中。當然,我們都知道這是糟糕的設計,但似乎他們已經這樣做來提高這種情況下的性能。
明顯的解決方案是從PDA數據庫中完全刪除產品表。但是我不能這樣做,因爲有時需要它。駕駛員可以隨時將新產品添加到發票中。我的老闆建議他們偶爾可以同步大型產品表,或者當他們嘗試添加產品時發現它不在那裏。 這不適用於當前的設計,因爲如果下載的發票包含不在PDA上的新產品,它將引發數據庫外鍵錯誤。
抱歉發佈這麼大的消息。希望它是有道理的。我不想刪除我的數據庫限制,並搞亂我的數據結構:(
爲什麼要同步產品表的阻力? – 2010-11-23 19:51:52
...而且,你能擺脫只有(和同步)產品表的一部分(只是一些列)? – 2010-11-23 19:52:29