试图找出数据库表关系(Rails / ActiveRecord)

时间:2017-04-29 04:57:14

标签: ruby-on-rails ruby activerecord

因此,我将在接下来的两周内构建一个网络应用程序,旨在将音乐学生与音乐教师联系起来。

这将全部使用带有ActiveRecord数据库的Ruby on Rails

完成

我正在尝试以适当的关系计划我的数据库,并希望确保在继续前进之前一切都很好。

我的想法是进行useruser互动。

这将包括以下列:

  
      
  • 名字(字符串)
  •   
  • 姓氏(字符串)
  •   
  • location(string)
  •   
  • mobile(boolean)
  •   
  • bio(text)
  •   
  • 电子邮件(字符串)
  •   
  • 密码(字符串)
  •   

模型中的关联类似于

  
      
  • 班级学生
  •   
  • has_many:老师,通过:::tutorships
  •   
  • has_many:instruments
  •   

然后

  
      
  • 班级老师
  •   
  • has_many:学生,通过:::tutorships
  •   
  • has_many:instruments
  •   

然后是仪器表

  
      
  • instrument(string)
  •   
  • skill_level(整数)*使用模型中的枚举与初学者,中级和&先进
  •   
  • 模型将是(belongs_to(:student /:teacher)
  •   

然后,用户之间的联接表将是一个辅导表:

  
      
  • belongs_to:student
  •   
  • belongs_to:老师
  •   
  • has_many:课程
  •   

然后是课程表

  
      
  • belongs_to:tutorship
  •   

所以,这就是我到目前为止所拥有的。我的问题是,当我在Rails中设置我的迁移时,我是否会丢失表格中的任何内容?

我认为我需要提出类似t.belongs_to :student之类的内容,但因为这是一种useruser关系。

我在这里缺少什么?我知道有些不对劲。

2 个答案:

答案 0 :(得分:0)

SQL数据库是高度规范化的,但您当然可以将学生和教师ID复制到课程中,从而进行非规范化,并且为了提高性能,这是一个很好的理由。

实际上,在这种情况下,这是一个好主意,想到老师生病了,还有一个课程由替代老师教授。无需创建新的辅导,只需为该课程分配不同的老师。

你缺少的东西当然是时间戳/日期。

答案 1 :(得分:0)

如果您想知道的话,您只需要将t.belongs_to :student添加到辅导和工具表中,而不是教师。

许多人希望添加一些状态列来区分学生和教师的活跃/前/ ...