我需要创建一个管理团队的数据库。im正在处理的两个表是meet表和events表。
以下是基本流程
团队A可以创建一个新的跟踪会议,它将添加1行到会议表中,其中包含会议的元数据,如日期、位置,还必须包括事件列表。
事件是一个表,大约500个可能的事件,可以在一次比赛中竞争。例如距离、事件类型、男性/女性、年龄等
我希望在会议的生成期间,用户能够选择会议将有哪些事件。
因此,创建一个新会议,完成元数据,并从所有可能事件列表中选择(对于Ex) 30个事件。
所以,我的问题是什么样的表结构最能支持这一点。我在想在我的meet表中有一个列,用于保存事件和事件数组。但是有没有更好的方法来处理这个问题呢?我正在使用postgres和rails
发布于 2013-01-14 02:50:50
这听起来像是Rails has_many :through association的完美用法。您应该有一个meet_events连接表。meet_events表中有一个外键(belongs_to) meet_id列,它指向与之关联的meet,还有一个event_id列,它指向一个可用的事件。您的Meet模型将使用has_many :meet_events和has_many :events, :through => :meet_events。这将允许您获取与此会议关联的事件对象。
MeetEvent模型只有两个belongs_to。一个用于meet,另一个用于event。
下面是一组简单的模型:
class Meet < ActiveRecord::Base
has_many :meet_events
has_many :events, :through => :meet_events
end
class Event < ActiveRecord::Base
has_many :meet_events
has_many :meets, :through => :meet_events
end
class MeetEvent < ActiveRecord::Base
belongs_to :meet
belongs_to :event
end以下是一些数据及其建模内容的示例:
相遇
id | name
------------------
1 | Meet 1
2 | Meet 2事件
id | name
------------------
1 | Event 1
2 | Event 2
3 | Event 3meet_events
id | meet_id | event_id
----------------------------
1 | 1 | 1
2 | 1 | 3
3 | 2 | 2
4 | 2 | 3这基本上是对Meet 1中包含Event 1和Event 3的建模。Meet 2有Event 2和Event 3。这也让您可以询问特定的Event它在什么地方遇到它。例如,当event为Event 3时调用event.meets,它将告诉您Meet 1和Meet 2都包含该事件。
https://stackoverflow.com/questions/14306865
复制相似问题