我的应用程序允许用户在另一个表中创建一个和一个唯一的每周条目。执行此想法会导致通常的问题,我可能会在检查另一个连接上的ifExists
后提交一条记录并最终得到两条记录。我不能乐观地锁定一个不存在的记录,并希望避免对整个表进行悲观锁定。
那么这里最好的解决方案是什么?每周为所有用户创建记录?
答案 0 :(得分:1)
创建第二个包含Weeks的表(例如,WeekId,StartDate,EndDate)。
然后在第一个表中为User表创建两个外键关系,为Week表创建第二个外键关系。 然后添加一个唯一约束,以确保每个用户每周只能获得一条记录。
ALTER TABLE dbo.UserWeeks
ADD CONSTRAINT uq_UserWeeks UNIQUE(UserId, WeekId);
由于唯一约束,第二个插入将失败。