许多客户编辑和增强数据库文档

我实际上已经制作了数据库表(在MS SQL服务器上进行了规范化),并为应用程序开发了一个独立的Windows前端,这些应用程序肯定会被少数客户用来添加和修改细节。 我们肯定会添加一个互联网用户界面,以便在晚些时候查看我们的制造地点。

我担心,如果2个客户开始编辑并在此之后增强同一个文档,那么最后一个用于升级的肯定会是“胜利者”,并且重要的细节也可能会被删除。 你会想到各种各样的补救措施,但我不确定我是否有可能造成更大的挫败感。

  1. 没有做任何事情,也希望2个客户永远不会在同一时间编辑和增强同一个文档。 - 如果发生了什么,可能永远不会发生什么?
  2. 编辑和增强方案可以存储初始信息的副本以及更新,然后在客户实际上最终编辑和增强时进行对比。 如果他们变化显示客户并且还确认升级 - 将要求保存2份重复的信息。
  3. 添加上次升级的DATETIME列,并在升级时检查它们是否匹配,否则在显示区别之后。 - 在每个相关表中调用新列。
  4. 创建一个编辑和增强表,在客户开始编辑和增强肯定会被检查的文档时注册,并防止各种其他客户编辑和增强相同的文档。 - 当然,如果客户发生冲突,那么肯定会要求对程序流通有一个很好的想法以阻止困境,并且还要保证文件的安全性。

存在任何更好的补救措施,还是应该与其中的一起使用?

0
2019-05-03 22:44:06
资源 分享
答案: 4

另一种选择是检查要转换的文档中的值是否与开始时的状态相同:

SELECT 
    customer_nm,
    customer_nm AS customer_nm_orig
FROM demo_customer
WHERE customer_id = @p_customer_id

(显示customer_nm区域并由客户对其进行转换)

UPDATE demo_customer
SET customer_nm = @p_customer_name_new
WHERE customer_id = @p_customer_id
AND customer_name = @p_customer_nm_old

IF @@ROWCOUNT = 0
    RAISERROR( 'Update failed: Data changed' );

您不需要向表中添加新列(也不需要将其维护大约一天),但是您确实需要创建更多详细的SQL声明并通过 并且 区域保存的过程。

此外,它还具有您无需保护文档的优点-由于我们大多数人都认识到,当不需要保存文档时,文档肯定会保留完整的安全性。

0
2019-12-02 00:15:05
资源

@Mark Harrison:SQL Server不支持该语法(SELECT ... FOR UPDATE)。

SQL Server匹配是SELECT声明提示UPDLOCK

有关其他信息,请参见SQL Server联机丛书

0
2019-05-07 19:33:29
资源

如果您预计很少崩溃,乐观并发可能是您的最佳选择。

Scott Mitchell创建了一个关于应用该模式的全面教程:
实现乐观并发

0
2019-05-07 17:42:50
资源

数据库肯定会为你做这件事。 考虑“select ... for upgrade”,这仅仅是为了这个例子。 它肯定会为你挑选的行提供一个写锁定,你可以在那之后投入或缩减。

0
2019-05-07 17:23:59
资源