2011-11-03 40 views
0

我的系统只需要从服务器获取更新。我如何设计我的数据库?有一个审计表或有没有其他设计机制?我正在计划的是从我的设备发送更新ID,并检索新的更新。如何真正实现这个?'只获取更新'设计

+0

你指的是什么样的更新?这与数据库有什么关系?你需要提供更多的细节 – Suhas

回答

0

写入审计或更改表发生了什么变化是你所提到的一种方法。

如果您使用SQLServer的,还有一个时间戳列。这不是一个数据时间列 - 名称是不正确的。相反,它是一个递增的数字,当一行被触摸时,它会得到下一个数字。如果获得最大时间戳记,然后再查询时间戳大于那么长的所有行,则会得到更改/添加的行。

http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx

的SQL Server时间戳数据类型无关,与时间或日期 。 SQL Server时间戳是二进制数字,表示 数据库中发生数据修改的相对序列。时间戳数据类型最初实现为支持SQL Server恢复算法的 。

我特别要警惕的一种方法是使用datetime作为水印。它转变,可以改变,并且不适合在算法中使用 - 特别是用于检测已经发生了什么变化。我看到系统试图依靠日期时间作为可靠的水印方法。

+0

//是的,我穿过时间戳,我发现它很有趣。但如何正确实施?我打算在所有表中插入一个时间戳列,或者使用一个单独的审计表,其中使用其他表调用的触发器插入数据。如果是这样,我的表格结构是什么? //表Action_History(Action_Id,Action,TableName,Primary_Key_OfTable,TimeStamp)// OR //表Action_History(Action_Id,Action,TableName,Column Name,Old_Value,New_Value,TimeStamp)?那么,如何将复合PK连接到表格呢?我如何跟踪他们的变化? –

+0

对于时间戳 - 假设您有一张客户表。而且,客户表与其他客户表相关。当客户被添加或编辑时,他们的时间戳列会发生变化。然后,试图获得“所有改变的顾客”的消费者将调用GetCustomersSince(长水印)方法。该make会查询所有客户的时间戳>水印并返回。 – bryanmac

+0

对于历史记录表,必须具有像object_type_id,object_id,action_id,who_changed之类的内容。在该解决方案中,它是仅附加表格,并且自动生成的pk id成为水印。如果我这样做了,我会避免触发器,并且sprocs或批处理在交易中写入。 – bryanmac

1

这听起来像你正在寻找SQL Server Replication。您可能需要查看technet文章Exchanging Data with Mobile Users,其中描述了两种常见模型,以及如何使用SQL Server来帮助您。

您可以选择与审计表推出自己的,但你仍然需要管理的复制服务,旨在帮助您解决更新冲突的问题。

+0

我认为他说他需要(读)发生了什么变化。不确定这意味着复制两个数据库。可能是一位客户拉取自上次访问以来发生更改的内容。 – bryanmac

0

几年前,我实现了这种设计。这是非常微不足道的,但它的工作。 据我所知,你想像Adobe一样将更新推送到你的客户端。 在数据库中保留一个表格(它甚至不需要是一个表格,你可以用XML保持输入)。 当你的客户端应用程序的负载,核对服务器的版本,如果不匹配,然后下载最新的更新,然后更新客户端版本其他正常加载客户端应用程序