数据库版本控制?

3

我正在为一个运动俱乐部制作数据库,包括教练和球员。球员可以自己创建,教练也可以创建和更新球员。

如何制作编辑部分,以便只有一个教练可以同时更新球员的信息。 我考虑使用版本控制。在每个表中创建一个版本行,并在编辑时更新它,以确保只有一个人可以编辑它。

还有其他建议吗?

3个回答

1

从概念上讲,你有三个选择。

锁定

你可以创建一个“锁定”记录的机制。这意味着在你编辑该记录时,没有其他用户可以获得对该记录的写访问权限。实际上,这是可怕的 - 正如 duedl0r 所说,故障模式是极其严重的,对于你的应用程序来说,可能不值得这样做。

比较

这是我遇到的最常见的模型。在从数据库检索记录之前进行编辑时,你需要找到一种识别该记录的方法 - 通常是通过将所有字段哈希在一起。一旦用户完成更改,你就从数据库中检索相同的记录,将其与你原始快照的(哈希)进行比较,并在记录在此期间发生更改时通知用户。

忽略它,或设计可能性消失

考虑到你正在处理非常少量的并发用户,这种情况发生的风险可能是微不足道的,因此你可以选择不处理它。或者,你可以设计应用程序,使教练只能修改自己的球员。

你可能还想构建一些逻辑来阻止教练创建重复的球员 - 这是非常棘手的。"Peter Michael Smith" 和 "Pete Smith" 是同一个球员吗?


1

是的。您的建议是可行的。

假设您从数据库中加载一个id = 1且版本号为1的记录到您的应用程序中,然后对其进行修改。在发出UPDATE SQL以更新更改时,您应该同时更新并包括版本列的检查。

UPDATE SQL应如下所示:

update ITEM set REMARK="SOME UPDATE REMARK!!" , VERSION= @origianl_vesrion +1 
where ITEM_ID=1 and VERSION=@origianl_vesrion

注意:@origianl_vesrion 是加载到您的应用程序中的版本列的值。

如果另一个事务在您提交之前更新并提交了相同的行,则发出的SQL的更新行计数将为零,因为版本列由该事务增加,并且不再等于1。

因此,如果更新行计数为零,则可以显示错误消息,例如“有人也更改了相同的记录,请重试”。


0
创建一个包含教练ID和球员ID的“锁定”表。在编辑时,检查表中是否存在这两个ID,并根据情况进行相应操作。完成编辑后,可以删除该条目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接