同时访问数据库;保持所有连接的数据一致

时间:2017-05-03 12:39:13

标签: database database-design

我在这里制作了一个数据库系统:

(关于规范化的评论也受到高度赞赏 - 我有一种感觉你会厌倦我对tblIsolateSensitivity所做的事情; tblHAIFile只有一堆布尔字段和外键)。

假设我们有x个终端访问数据库。 X1编辑患者01,X2编辑患者02,X3同时删除患者01。如何确保三个终端之间的数据都是最新且一致的?

目前,我只在需要完成查询时查询数据(即:当用户搜索记录时,或者程序需要根据数据库记录验证某些内容时),这意味着数据是仅更新为用户最近的查询。这使得难以确保所有终端上的数据都是最新的。当然,对于删除的条目,我有错误处理来处理,但其余的,好吧......

所以,我的问题是:你们通常如何应对这种情况?是否有这个概念的名称,以便我可以查阅并阅读很长时间?

1 个答案:

答案 0 :(得分:2)

从数据库设计的角度来看,您应该阅读乐观并发悲观并发。这两个选项可以确保您没有两个用户同时修改同一条记录,或者至少如果您允许这样做,则会检测到冲突以便解决。

乐观并发背后的基本思想是允许多个用户同时查看和修改数据,前提是这种情况相对较少。但是,在任何用户将更改写入数据之前,将进行检查以确保基础数据自最初读取以来未发生更改。在某些情况下,您可以在更新前手动执行此操作,并根据缓存值检查每个列值。但是,这很麻烦。一些DBMS系统具有使这更简单的功能。例如,SQL Server具有 ROWVERSION (以前称为TIMESTAMP)数据类型,这使您可以使用单个值轻松检查自上次读取以来是否有其他人更改了记录。

悲观并发背后的基本思想是你对记录进行锁定,期望你将改变它。当您持有锁时,DBMS将阻止其他人获得自己的锁。

乐观并发的优点在于它非常轻巧,不会对您的应用程序造成太多干扰,让您在极少数情况下手动(或自动)解决任何冲突当它们发生时您也不必担心有人在阅读记录,锁定它然后回家度过周末。

悲观并发的优点在于它可以防止冲突,但它可以阻止一个用户在等待另一个用户完成他们正在做的事情时工作。

从记录在背景中改变的用户(即他们被另一个用户改变)的角度来看,这不是数据库设计特征。它可能是您的应用程序逻辑或应用程序的数据访问层的一项功能。