0

在我的场景中,a每天PLAYER可以执行 2ACTIONS次(例如,每天可以攻击 2 名其他玩家)。我实现了两个持久类:PlayerAction. Action类引用PlayerDate这个动作(日期只包含日期部分,比如 2013-01-15 00:00:00)。我想创建一个数据库级别的约束,Action将特定日期的记录数限制为 2。这将阻止玩家每天执行超过 2 个操作。该系统是高度并发的,应用程序级别的检查通常会失败,允许玩家同时执行 3-4 个动作。

我当前的解决方案是使用对、和PlayerDayActions的引用来实现第三个版本化实体。因此,我可以检查或计算玩家已经执行了多少操作,并且版本将不允许覆盖同时修改的实例(如果有的话)。为了扩展,我可以将 action1 和 action2 更改为列表并检查这样的列表。playerdateaction1action2action1 IS NULLaction2 IS NULLPlayerDayAction

有没有更干净和可扩展的解决方案来解决这个问题?在休眠中的普通 SQL 中?谢谢。

4

1 回答 1

0

如果您创建第三个表 PlayerDayAction,则具有 Player、date、action 列。为每个动作添加一条记录,如果(玩家今天有 2 个动作)不允许该动作。除非您希望这些数据用于历史目的,否则您甚至可以每晚或每周删除数据,这样表格就不会变得太大。

我就是这样做的:)。

于 2013-01-15T18:53:30.800 回答