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

Swinders 26 database sql-server

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

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

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

有没有更好的解决方案,还是应该选择其中一种?

Dave Ward.. 13

如果您预计不常发生冲突,乐观并发可能是您最好的选择.

Scott Mitchell编写了一个关于实现该模式的综合教程:
实现乐观并发