数据库设计用于动态数据

时间:2013-01-13 18:43:05

标签: ruby-on-rails database postgresql database-design

我需要创建一个管理团队的数据库。我摔跤的2张桌子是见面桌和活动表。

这是基本流程

A队可以创建一个新的赛道会议,它将在会议桌上添加1行,其中会议的元数据如日期,位置也必须包含事件列表。

活动是在会议期间可以参与竞赛的大约500个可能事件的表格。诸如距离,事件类型,男/女,年龄等事情

我希望在为用户生成会议期间能够选择满足哪些事件。

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

Soooo我的问题是哪种表结构最能支持它。我在考虑我的见面表中的一个列,其中包含一系列事件。但有没有更好的方法来解决这个问题。我正在使用postgres和rails

1 个答案:

答案 0 :(得分:0)

这听起来像是Rails has_many :through association的完美用法。您应该有一个meet_events联接表。 meet_events表中将包含一个外键(belongs_to)meet_id列,该列指向与其关联的会话,并且其中的event_id列指向其中一个可用事件。您的Meet模型会使用has_many :meet_eventshas_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 3

meet_events

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.meets是事件3时调用event,它会告诉您两个{{1} }}和Meet 1在其中包含该事件。