sql - rails : Is this a use case for Single Table Inheritance (STI)?

标签 sql ruby-on-rails database-design database-normalization sti

考虑这个设置。请理解我们的设置要详细得多,但这是一个简单的示例。
competition其中有 name .这是一年一度的比赛。competition_instances其中有 location , starts_at .
每场比赛都有sports其中有 name .

例子:competition . name :《 super 碗》有不同competition_instances每年但sport保持原样。
相反,competition . name :“奥运”有不同competition_instances和不同 sports在每个 competition_instance .

最好创建competition_sportscompetition_instance_sportscompetition_instance_sports作为 competition_sports 的子类?

目标 : 使用 competition_instance_sports记录(如果存在),否则使用 competition_sports记录。在我们现实世界的应用程序中,每个比赛/比赛实例可以有 20-50 项运动记录。我们怎样才能最好地实现?

最佳答案

根据我从问题中的理解,我看不出 STI 在这种情况下有什么帮助。但是,连接表可以让您到达您想要的位置。

我建议创建一个新表 sports ,该模型将包含每项运动的所有具体细节。 competition_instance.rb将有一个/多个 sport.rb . competiton.rb会有很多sports通过 competition_instance.rb .

竞赛.rb

Class Competition < ActiveRecord::Base
   has_many :competition_instances
   has_many :sports, through: :competition_instances
end

Competition_instance.rb
Class CompetitionInstance < ActiveRecord::Base
   belongs_to :competition
   belongs_to :sport
end

体育.rb
Class Sport < ActiveRecord::Base
   has_many :competition_instances
end

通过使用此设计,您将能够实现以下目标:

1- 您将在数据库中拥有预定义的运动及其特定属性。

2- 每场比赛将有.sports这将把本次比赛中的所有运动项目都交给奥运会的案例。

3- 您将能够在比赛实例表中为每个比赛实例(例如 event_start_timeevent_end_time )设置特定属性。

关于sql - rails : Is this a use case for Single Table Inheritance (STI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34023926/

相关文章:

mysql - 如何计算 1 :N:N relation in a faster way? 中的行数

mysql - 按年份对记录进行分组,具有开始日期和结束日期

ruby-on-rails - 你会如何建立这个每日类(class)表?

ruby-on-rails - 如何使用 Webpacker 将 `includePaths` 添加到 Sass 加载器

database-design - 为我的网站建立数据库

mysql - PHP MySQL 从 MySQL 返回不同的结果

java - statements.executeQuery() 之谜。代码没有被执行,也没有捕获异常。

ruby-on-rails - 在生产中使用 MongoDB 构建索引的时间和频率

ruby-on-rails - ruby on rails 中的关系数据库

sql - 我应该如何命名将两个表映射在一起的表?