0

我正在使用Windows Mobile上運行的Compact Framework應用程序。它被交付驅動程序用來告訴他們下一份工作和跟蹤支出等。我在移動設備上有SQL CE數據庫,服務器上有SQL Server。在使用Sync Framework解決主要的性能和配置問題後,我最終使用WCF編寫了自己的同步代碼。這個效果很好,比Sync Framework快很多,但我被要求進一步提高速度。現在我們進入問題的細節。希望我能夠清楚地解釋這一點。數據庫和應用程序設計 - 消除約束?

同步一次只能處理一個表,並且只能單向運行。更新僅從服務器發送到PDA。傳回服務器的數據處理方式完全不同。首先,我刪除已經從服務器上刪除的PDA上的任何記錄。由於數據庫的限制,我必須在從'父'表中刪除之前從'子'表中刪除,所以我從底層開始處理這個擴展。例如。從產品表中刪除之前,我從發票表中刪除記錄。

接下來,我將新記錄添加到已添加到服務器上的PDA中。在這種情況下,我必須先更新父表,然後逐步縮小heirachy並更新子表。

問題是,我的老闆不喜歡這樣一個事實,即當交付驅動程序只需要 invoiceProduct表時,我的應用程序將保留一個像產品表一樣的大表,並與服務器同步。 invoiceProduct表將發票和產品錶鏈接在一起,幷包含有關產品的一些信息。我的意思是他們的數據庫設計沒有標準化,產品名稱已被複制並存儲在invoiceProduct表格以及產品表格中。當然,我們都知道這是糟糕的設計,但似乎他們已經這樣做來提高這種情況下的性能。

明顯的解決方案是從PDA數據庫中完全刪除產品表。但是我不能這樣做,因爲有時需要它。駕駛員可以隨時將新產品添加到發票中。我的老闆建議他們偶爾可以同步大型產品表,或者當他們嘗試添加產品時發現它不在那裏。 這不適用於當前的設計,因爲如果下載的發票包含不在PDA上的新產品,它將引發數據庫外鍵錯誤。

抱歉發佈這麼大的消息。希望它是有道理的。我不想刪除我的數據庫限制,並搞亂我的數據結構:(

+0

爲什麼要同步產品表的阻力? – 2010-11-23 19:51:52

+0

...而且,你能擺脫只有(和同步)產品表的一部分(只是一些列)? – 2010-11-23 19:52:29

回答

1

您似乎遇到了一些體系結構問題。我有一個客戶端 - 服務器應用程序,其中客戶端加載了太多不需要的數據。

我們使用ADO.NET(數據集)來反映數據庫在客戶端的含義。數據集類就像內存中的CE SQL Server一樣。 我們公司開始擁有更大的客戶,我們的架構不足以處理所有數據。

過去,我們做了以下工作。這些都是沒有快速的解決方案:

  1. 在 數據集刪除客戶端上的
    • 約束 的「最」的所有常用數據還是有約束。
  2. 創建加載數據子集的邏輯,而不是將所有內容加載到客戶端。例如,我們只加載7天的工作數據,而不是每個工作數據(這是我們過去所做的)。
  3. 通過添加新列來非規範化某些數據,以便我們不必加載我們不需要的額外數據
  4. 某些數據僅在需要時根據客戶端模塊加載。

只要您在SQL Server上保留數據庫約束,就應該沒有數據完整性問題。但是,在您的PDA端,您需要進行更多測試以確保您的應用程序正常運行。

當你已經有一個現有的體系結構時,這不是一個容易解決的問題。希望這些建議可以幫助你。

1

爲您的產品添加created_on字段並跟蹤上次每個pda同步的時間。發票下載時,檢查是否該產品比上一次同步更新,如果它重新同步PDA。似乎不會將數據庫擰得太多?

+0

謝謝Nate - 不是一個壞建議。仍然需要一點工作。我會記住它。 – 2010-11-24 04:49:55