sql-server - 由多个用户编辑数据库记录

标签 sql-server database

我设计了数据库表(标准化,在 MS SQL 服务器上)并为应用程序创建了一个独立的 Windows 前端,少数用户将使用该应用程序来添加和编辑信息。我们将添加一个网络界面,以便日后在我们的生产区域进行搜索。

我担心如果两个用户开始编辑同一条记录,那么最后提交更新的将是“赢家”,重要信息可能会丢失。我想到了很多解决方案,但我不确定我是否会制造更大的麻烦。

  1. 什么都不做,希望两个用户永远不会同时编辑同一条记录。 - 可能永远不会发生,但如果发生了怎么办?
  2. 编辑例程可以存储原始数据的副本以及更新,然后在用户完成编辑时进行比较。如果它们不同,则显示用户和确认更新- 将需要存储两个数据副本。
  3. 添加最后更新的 DATETIME 列并在我们更新时检查它是否匹配,如果不匹配则显示差异。 - 需要在每个相关表中添加新列。
  4. 创建一个编辑表,在用户开始编辑将要检查的记录时进行注册,并防止其他用户编辑同一记录。 - 需要仔细考虑程序流程,以防止死锁和记录在用户退出程序时被锁定。

是否有更好的解决方案,或者我应该选择其中之一?

最佳答案

如果您希望碰撞不频繁,Optimistic Concurrency可能是您最好的选择。

Scott Mitchell 写了一篇关于实现该模式的综合教程:
Implementing Optimistic Concurrency

关于sql-server - 由多个用户编辑数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/833/

相关文章:

sql - 如何仅更改日期数据类型的年份

mysql - 带有 Entity Framework 的适配器 (C#)

sql-server - 用于复制包含循环引用的 Excel 计算的 SQL Server 代码

sql-server - 'COLLATE SQL_Latin1_General_CP1_CI_AS' 是做什么的?

java - 数据库的性能是哪一项?

php - Magento Product Collection GROUP BY 具有最低价格产品 ID 的最低价格?

java - 每次都检查数组还是插入数据库哪个更快?

sql-server - 如何改进大表的读取操作?

java - 最佳数据库迁移方法?

mysql - MySQL与docker访问被拒绝