与多个对象有关系的数据结构

时间:2011-07-08 04:55:22

标签: ruby-on-rails ruby-on-rails-3

我正在试图找出表示以下数据结构和关系的最佳方式。

数据模型

Student
   name, gpa, etc
Teacher
   name, salary, etc
Faculty
   name, etc
Message
   from
   to

我的问题是studentteacherfaculty可能是给定邮件的发件人或收件人。

天真的解决方案0

使用一堆连接表! student_join_messagesteacher_join_messages,....

问题:您需要让联接双向(从和到),然后为了找到方程的另一半,您必须查看3个连接表(在这个案子)寻找关系。

天真溶液1

Message
  from_id
  from_type
  to_id
  to_type

然后模型可以将type解释为哪个模型(Student = 0,Teacher = 1,...)然后使用id来查找它。

问题:这不是非常干净的代码,每个模型都需要实现自己的messages关系。 (更不用说这似乎很慢)

def messages
  Message.where(:from_id => self.id, :from_type => 1
end

(或类似的东西)

那么对此有什么合适的解决方案?

(如何更好地描述这个问题的任何帮助将不胜感激)

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

只有一个User模型具有user_type属性(student = 0,teacher = 1,faculty = 2),然后是您需要的所有属性(gpa,salary等)。如果是学生,请将工资字段保留为NULL,如果是教师,则将gpa字段保留为NULL等。

然后你的消息表将只有sender_id和recipient_id。