ruby-on-rails - 动态数据的数据库设计

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

我需要创建一个数据库来管理团队。我摔跤的 2 个表是 session 表和事件表。

这是基本流程

A 队可以创建一个新的田径比赛,这将在比赛表中添加 1 行,其中包含比赛的元数据,例如日期、地点,它还必须包括一个事件列表。

Events 是一个包含大约 500 个可能的事件的表格,这些事件可以在 session 期间参加。距离、事件类型、男性/女性、年龄等事物

我希望在为用户生成 session 期间能够选择 session 将有哪些事件。

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

太棒了,我的问题是什么表结构最能支持它。我正在考虑我的 session 表中的一列,其中包含一系列事件。?但是有更好的方法来处理吗?我正在使用 postgres 和 rails

最佳答案

这听起来像是对 Rails 的完美使用 has_many :through association .您应该有一个 meet_events 连接表。 meet_events 表将有一个外键 (belongs_to) meet_id 列,它指向与之关联的 session ,以及一个 event_id 列它指向可用事件之一。您的 Meet 模型将使用 has_many :meet_eventshas_many :events, :through => :meet_events。这将允许您获取与此 session 关联的事件对象。

MeetEvent 模型只有两个 belongs_to。一份用于聚会,一份用于事件

这是一组简单的模型:

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 是 Event 时调用 event.meets 3,它会告诉你 Meet 1Meet 2 都有那个事件。

关于ruby-on-rails - 动态数据的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306865/

相关文章:

sql - 数据库作业调度

mysql - 存储数据库记录的数量是多余的吗?

sql - ActiveRelation 准备好迎接黄金时段了吗?

ruby-on-rails - 将对象查询到数组组中

ruby-on-rails - Postgres JSON 列使用表单更新单个键/属性

mysql - 将 scrumler 插件安装到 redmine 时出现内部错误

ruby-on-rails - Rails Routes : change resource identifier path name? 始终使用 params[:model_id] 而不是 params[:id]

ruby-on-rails - Rails 4 — 如何从 JSON API 填充用户模型?

php - 数据库表设计多个表的外键

ruby-on-rails - 如何使用 Sidekiq 每 2 秒发送一次请求?