版本控制数据库?

时间:2011-11-17 09:50:08

标签: database-design

我正在为一家体育俱乐部建立一个数据库,包括教练和球员。球员能够创造自己,教练也能够创造和更新球员。

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

关于如何做的任何其他建议??

3 个答案:

答案 0 :(得分:1)

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

<强>锁定

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

<强>比较

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

忽略它,或设计可能性

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

你可能也想建立一些逻辑来阻止教练创造重复的球员 - 众所周知的棘手。 “Peter Michael Smith”和“Pete Smith”是同一个玩家吗?

答案 1 :(得分:1)

是的。你的提议是可行的。

假设您将id = 1和version = 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 的更新行计数将为零,因为该事务增加了VERSION列,并且不再等于1

因此,如果更新行数为零,您可以显示错误消息,例如&#34;有人也会更改相同的记录,请重试&#34;

答案 2 :(得分:0)

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

相关问题