GUID作为主键-离线OLTP

5
我们正在设计一个典型的OLTP应用程序(比如:采购系统)。然而,这个特定的应用程序需要一些用户脱机工作,因此他们需要能够将数据库下载到本地计算机上进行操作,然后在局域网上同步回来。
我想指出的是,我知道这已经被做过了,我只是没有使用过这个特定的模型。
我考虑过的一个想法是使用GUID作为表键。例如,采购订单不会有一个数字(自动编号),而是一个GUID,以便每个脱机客户端都可以生成它们,并且当我重新连接到数据库时不会发生冲突。
这是一个不好的想法吗?通过GUID键访问这些表会很慢吗?
您是否有这些类型系统的经验?您是如何解决这个问题的?
谢谢! 丹尼尔
15个回答

0
如果您的数据库足够小,可以下载到笔记本电脑并离线使用,那么您可能不需要过多担心int和Guid之间的性能差异。但是不要低估了在开发和故障排除系统时int的实用性!无论您是否使用Guid,您可能需要想出一些相当复杂的导入/同步逻辑,因此它们可能帮助不如您想象的那样多。

0

@Simon,

你提出了非常好的观点。我已经在考虑离线时生成的“临时”、“可读”的数字,在同步时重新创建。但我想避免使用外键等方式来实现。


0
我会建议您考虑使用SQL Server Compact Edition来解决这个问题!它可以帮助您解决所有的问题。 使用SQL Server 2005 Compact Edition进行数据存储架构 它是专门为...设计的。
现场力量应用程序(FFAs)。 FFAs通常具有以下一个或多个属性:
它们允许用户在与后端网络断开连接的情况下执行其工作职能 - 在客户位置、在路上、在机场或家中。
FFAs通常设计为偶尔连接,这意味着当用户运行客户端应用程序时,他们不需要任何类型的网络连接。 FFAs经常涉及多个客户端,可以同时访问和使用来自后端数据库的数据,无论是在连接模式还是断开模式下。
FFAs必须能够将数据从后端数据库复制到客户端数据库以进行离线支持。当应用程序能够连接到网络时,它们还需要能够将修改、添加或删除的数据记录从客户端复制到服务器。

0

首先想到的是:微软难道没有设计DataSet和DataAdapter模型来支持这种情况吗?

我相信我读过微软将他们的ADO记录集模型更改为当前的DataSet模型,以便它也可以离线工作。还有ADO.NET同步服务

我相信我已经看到使用外键的DataSet模型的代码,当使用DataAdapter时,它们仍然可以完美同步。虽然我没有尝试过同步服务,但我认为您也可以从中受益。

希望这可以帮助到您。


0

@Portman 默认情况下,PK == 聚集索引,创建主键约束将自动创建聚集索引,如果您不想要它聚集,则需要指定非聚集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接