使用这些表格:
研讨会
WorkshopID | WorkshopName | WorkshopLimit
1 Workshop A 10
2 Workshop B 20
3 Workshop C 30
4 Workshop D 40
5 Workshop E 50
workshop_participants
ParticipantID | RegistrantID | WorkshopID
1 1 1
2 1 2
3 2 3
4 3 2
5 3 5
6 4 1
7 4 4
8 5 4
为每次注册减去和更新WorkshopLimit
的数量是否更快,或者计算某个研讨会的参与者总数,然后将其减去WorkshopLimit
(不更新) WorkshopLimit
)?
用于此的一个示例是我将检查某个研讨会的剩余时段。
答案 0 :(得分:0)
这取决于您的WorkshopLimit的严格程度。如果禁止过度注册,则更新WorkshopLimit是一种保护规则的简便方法。在事务中进行注册和更新WorkshopLimit,如果WorkshopLimit小于0,则回滚事务并取消注册。
如果允许过度注册,则两种解决方案均可接受。好像你没有庞大的数据量,性能差异应该很小。
答案 1 :(得分:0)
运行像SELECT WorkshopLimit FROM workshops WHERE id = 42
之类的简单选择语句来快速读取datarow
中的简单值以检查研讨会中剩余的开放席位比使用涉及聚合函数的更复杂查询更快像COUNT(...)
一样按需计算剩余的开放座位。
但是,如果您在每次注册时更新workshops
表中的剩余空缺席位值,或者如果您在需要时动态计算剩余席位,则很可能根本不具有速度相关性。它们太快而无法与您决定使用一种方法相关联。
TL; DR =没关系。