数据库和应用程序设计 - 删除约束?

时间:2010-11-23 05:13:06

标签: sql architecture windows-mobile compact-framework synchronization

我正在开发在Windows Mobile上运行的Compact Framework应用程序。交付驱动程序将它用于告诉他们下一份工作并跟踪支出等。我在移动设备上有一个SQL CE数据库,服务器上有SQL Server。在遇到Sync Framework的主要性能和配置问题后,我最终使用WCF编写了自己的同步代码。这种方法运行良好,比Sync Framework快得多,但我被要求进一步加快速度。现在我们深入了解问题的细节。希望我能清楚地解释清楚。

同步一次只能处理一个表,并且只能单向运行。更新仅从服务器发送到PDA。返回服务器的数据以完全不同的方式处理。首先,我删除PDA上已从服务器中删除的所有记录。由于数据库的限制,我必须在从'父'表中删除之前从'子'表中删除,所以我从底部开始处理heirachy。例如。在从products表中删除之前,我从发票表中删除记录。

接下来,我将新记录添加到已添加到服务器上的PDA中。在这种情况下,我必须先更新父表,然后再处理heirachy并更新子表。

问题是我的老板不喜欢这样一个事实,即我的应用程序会保留一个大表,就像产品表与服务器同步,当交付驱动程序只需要 invoiceProduct表。 invoiceProduct表将发票和产品表链接在一起,并包含有关产品的一些信息。我的意思是他们的数据库设计没有规范化,产品名称已经复制并存储在invoiceProduct表和product表中。当然我们都知道这是糟糕的设计,但似乎他们这样做是为了提高这种情况下的性能。

显而易见的解决方案是从PDA数据库中完全删除产品表。但是我不能这样做,因为有时需要它。司机可以动态地将新产品添加到发票中。我的老板建议他们可以偶尔同步大型产品表,或者当他们尝试添加产品并发现它不存在时。  这不适用于当前的设计,因为如果下载的发票包含不在PDA上的新产品,则会抛出数据库外键错误。

很抱歉发布了这么大的邮件。希望这是有道理的。我不想删除我的数据库约束并弄乱我的数据结构:(

2 个答案:

答案 0 :(得分:1)

为您的产品添加created_on字段,并跟踪每个pda上次同步的时间。下载发票后,检查产品是否比上次同步更新,以及是否重新同步pda。看起来好像不会过多地搞砸数据库?

答案 1 :(得分:1)

您似乎遇到了一些架构问题。我研究的产品有点类似的情况。我有一个客户端 - 服务器应用程序,客户端加载了太多不需要的数据。

我们使用ADO.NET(数据集)来反映数据库在客户端的含义。数据集类就像内存中的CE SQL Server。 我们公司开始拥有更大的客户,我们的架构不够快,无法处理所有数据。

过去,我们做了以下工作。这些都不是快速解决方案:

  1. 删除“大多数”约束 在客户端
    • 所有经常使用的数据仍然具有约束力 数据集。
  2. 创建逻辑以加载数据子集,而不是将所有内容加载到客户端。例如,我们只加载7天的工作数据,而不是每个工作数据(这是我们过去所做的)。
  3. 通过添加新列来对某些数据进行非规范化,这样我们就不必加载我们不需要的额外数据
  4. 仅在需要时才根据客户端模块加载某些数据。
  5. 只要在SQL Server上保留数据库约束,就不会出现数据完整性问题。但是,在PDA方面,您需要进行更多测试以确保应用程序正常运行。

    当您已有现有架构时,这不是一个容易解决的问题。希望这些建议对您有所帮助。