由于这是一天一次的事情,我想我会以一种易于编辑、维护和可视化的方式存储数据。你的多对多方法会奏效。主要是,我希望很容易找到选择特定 ball_number 的用户。
users
id
name
drawings
id
type # Mega Millions or Singapore (maybe subclass Drawing)
drawing_on
wining_picks
drawing_id
ball_number
ticket
drawing_id
user_id
correct_count
picks
id
ticket_id
ball_number
输入数字后,查找在绘图中选择特定数字的所有 user_id
按日期获取图纸
drawing = Drawing.find_by_drawing_on(drawing_date)
通过 ball_number 和绘图获取用户。
picked_1 = User.picked(1,drawing)
picked_2 = User.picked(2,drawing)
picked_3 = User.picked(3,drawing)
这是用户的范围
class User < ActiveRecord::Base
def self.picked(ball_number, drawing)
joins(:tickets => :picks).where(:picks => {:ball_number => ball_number}, :tickets => {:drawing_id => drawing.id})
end
end
然后进行快速数组交叉以获得正确选择 3、4、5、6 的 user_id。您将遍历中奖号码以获取排列。
例如,如果中奖号码是 3,8,21,24,27,44
some_3_correct_winner_ids = picked_3 & picked_8 & picked_21 # Array intersection
对于每个获胜者 - 用正确的计数更新彩票。
我可能会单独存储获胜者,但是在正确计数上有一个索引,并且门票中没有太多数据,现在这可能没问题。