首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态数据的数据库设计

动态数据的数据库设计
EN

Stack Overflow用户
提问于 2013-01-14 02:43:05
回答 1查看 89关注 0票数 1

我需要创建一个管理团队的数据库。im正在处理的两个表是meet表和events表。

以下是基本流程

团队A可以创建一个新的跟踪会议,它将添加1行到会议表中,其中包含会议的元数据,如日期、位置,还必须包括事件列表。

事件是一个表,大约500个可能的事件,可以在一次比赛中竞争。例如距离、事件类型、男性/女性、年龄等

我希望在会议的生成期间,用户能够选择会议将有哪些事件。

因此,创建一个新会议,完成元数据,并从所有可能事件列表中选择(对于Ex) 30个事件。

所以,我的问题是什么样的表结构最能支持这一点。我在想在我的meet表中有一个列,用于保存事件和事件数组。但是有没有更好的方法来处理这个问题呢?我正在使用postgres和rails

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_eventshas_many :events, :through => :meet_events。这将允许您获取与此会议关联的事件对象。

MeetEvent模型只有两个belongs_to。一个用于meet,另一个用于event

下面是一组简单的模型:

代码语言:javascript
复制
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

以下是一些数据及其建模内容的示例:

相遇

代码语言:javascript
复制
id  |  name
------------------
1   |  Meet 1
2   |  Meet 2

事件

代码语言:javascript
复制
id  |  name
------------------
1   |  Event 1
2   |  Event 2
3   |  Event 3

meet_events

代码语言:javascript
复制
id  |  meet_id  |  event_id
----------------------------
1   |  1        |  1
2   |  1        |  3
3   |  2        |  2
4   |  2        |  3

这基本上是对Meet 1中包含Event 1Event 3的建模。Meet 2Event 2Event 3。这也让您可以询问特定的Event它在什么地方遇到它。例如,当event为Event 3时调用event.meets,它将告诉您Meet 1Meet 2都包含该事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14306865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档