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

相关问题