版本控制数据库?

版本控制数据库?

问题描述:

我正在为教练和球员制作一个体育俱乐部的数据库。球员能够创造自己,教练也能够创造和更新球员。版本控制数据库?

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

有关如何做到这一点的任何其他建议?

是的。你的建议是可行的。

假设您将数据库中id = 1和version = 1的记录加载到应用程序中。然后您修改它。在发布UPDATE SQL以更新更改时,您应该更新并包含对版本列的检查。

更新SQL应该像这样:

update ITEM set REMARK="SOME UPDATE REMARK!!" , VERSION= @origianl_vesrion +1 
where ITEM_ID=1 and [email protected]_vesrion 

注:@origianl_vesrion是当它被加载到你的应用程序目前的版本列的值)

如果另一个事务的更新和提交在您提交之前的同一行中,发布的SQL 的更新行数将为零,因为VERSION列由该事务增加并且不会再等于1。

因此,如果更新行数是零,则可以显示错误消息,说什么“有人更改相同的记录太多,请重试”

创建一个包含教练ID和玩家ID的'lock'表。编辑时,检查表格中是否存在两个ID,并据此采取行动。编辑完成后,您可以删除此条目。

+0

如果有锁,你也有死锁.. – duedl0r

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

锁定

你建立一种机制,以 “锁定” 的记载。这意味着没有其他用户可以在打开它进行编辑时获得该记录的写入权限。实际上,这是非常可怕的 - 正如duedl0r所说,失败模式是过高的,对于您的应用程序来说,这可能是不值得的。

比较

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

忽略它,或者设计走

假设你正在处理的并发用户的数量非常少的可能性,这种情况发生的风险可以忽略不计,所以你可以选择不处理它。或者,您可以设计应用程序,以便教练只能修改自己的球员。

你可能也想建立一些逻辑来阻止教练创造重复的球员 - 这非常棘手。 “彼得迈克尔史密斯”与“皮特史密斯”是同一名球员吗?