Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 同时访问数据库;在所有连接中保持数据一致_Database_Database Design - Fatal编程技术网

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

Database 同时访问数据库;在所有连接中保持数据一致,database,database-design,Database,Database Design,我在这里制作了一个数据库系统: (关于规范化的评论也非常受欢迎-我感觉你会恨我对TBLISOLEATIONS的处理;tblHAIFile只有一堆布尔字段和外键) 假设有x个终端访问数据库。X1编辑患者01,X2编辑患者02,X3同时删除患者01。如何确保三个终端之间的数据都是最新且一致的 目前,我只在需要进行查询时(即:当用户搜索记录时,或者如果程序需要根据数据库记录验证某些内容时)才查询数据,这意味着数据只会更新为用户进行的最新查询。这使得很难确保所有终端上的数据都是最新的。当然,对于删除的条

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

(关于规范化的评论也非常受欢迎-我感觉你会恨我对TBLISOLEATIONS的处理;tblHAIFile只有一堆布尔字段和外键)

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

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


所以,我的问题是:你们通常如何处理这种情况?这个概念有没有一个名称,以便我可以查找并详细阅读?

从数据库设计的角度来看,您应该阅读乐观并发悲观并发。这是两个选项,用于确保不会有两个用户同时修改同一记录,或者至少在允许的情况下,会检测到冲突,以便解决冲突

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

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

乐观并发的优点是它非常轻量级,不会对应用程序造成太多干扰,并且允许您在很少发生冲突的情况下手动(或自动)解决冲突。你也不必担心有人读了一张唱片,锁上它,然后回家度周末

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


当记录在后台发生更改(即被另一个用户更改)时通知用户,这不是数据库设计功能。它可能是应用程序逻辑或应用程序数据访问层的一个功能。

从数据库设计的角度来看,您应该了解乐观并发悲观并发。这是两个选项,用于确保不会有两个用户同时修改同一记录,或者至少在允许的情况下,会检测到冲突,以便解决冲突

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

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

乐观并发的优点是它非常轻量级,不会对应用程序造成太多干扰,并且允许您在很少发生冲突的情况下手动(或自动)解决冲突。你也不必担心有人读了一张唱片,锁上它,然后回家度周末

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


当记录在后台发生更改(即被另一个用户更改)时通知用户,这不是数据库设计功能。它可能是应用程序逻辑或应用程序数据访问层的一个功能。

非常感谢您的详细解释!我不得不承认,我在考虑对数据库中的记录进行悲观并发(不仅仅因为我通常是一个pess——我的意思是,现实主义者)。我认为可能出现的问题是,如果应用程序/DB连接崩溃,记录被锁定,直到DBA解锁所述记录为止。@RemiDarren您的评论的最后一句话不是问题。任何严肃的数据库系统,如Postgres、MS SQL Server、Oracle等,都会自动释放任何连接所持有的锁