无法找出表的正确数据结构

时间:2016-01-05 14:25:02

标签: ruby-on-rails database jointable

我有一个用户可以挑战其他用户的应用程序。挑战有日期,时间,地点,胜利者,失败者,可以接受或拒绝的分数。 我正在考虑应该应用的数据库结构。 起初我创建了一个如下所示的挑战表:

 create_table "challenges", force: :cascade do |t|
    t.date     "date"
    t.time     "time"
    t.text     "place"
    t.text     "score"
    t.integer  "winner"
    t.integer  "loser"
    t.integer  "referee"
    t.datetime "created_at",                 null: false
    t.datetime "updated_at",                 null: false
    t.boolean  "accepted",   default: false

我还使用user_id和challenge_id

创建了参赛者联接表
  create_table "contestants", force: :cascade do |t|
    t.integer  "user_id"
    t.integer  "challenge_id"
    t.datetime "created_at",   null: false
    t.datetime "updated_at",   null: false
  end

我不确定这是正确的数据结构,因为我现在在挑战的创建者和“收件人”之间的视图(不同的部分)中有所区别。 因此,我现在添加了一个直接将挑战链接到用户的迁移:挑战属于用户(挑战的创建者)和用户has_many挑战。但是现在我的参赛者表似乎有点多余了。

我想要实现的目标的正确数据结构是什么?

2 个答案:

答案 0 :(得分:1)

您可能不需要参赛者表。

如果您为challengerchallengee的挑战表或其他类似内容添加另外两列,该怎么办?

然后,用户可以像challenger一样遇到很多挑战,并且还有challengee的许多挑战。

我认为你可以尝试这种方法。

答案 1 :(得分:0)

没有冗余,这是一直这样做的。让模型模拟您在业务领域中使用的术语

class User
  has_many :challenges  #issued challenges
  has_many :authored_challenges, dependent: :destroy, class_name: Challenge
end

class Challenge
  belongs_to :author, class_name: User, foreign_key: 'author_id'
  belongs_to :recipient, class_name: User, foreign_key: 'user_id'
end