我正在试图找出表示以下数据结构和关系的最佳方式。
数据模型
Student
name, gpa, etc
Teacher
name, salary, etc
Faculty
name, etc
Message
from
to
我的问题是student
,teacher
或faculty
可能是给定邮件的发件人或收件人。
使用一堆连接表! student_join_messages
,teacher_join_messages
,....
问题:您需要让联接双向(从和到),然后为了找到方程的另一半,您必须查看3个连接表(在这个案子)寻找关系。
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
(或类似的东西)
那么对此有什么合适的解决方案?
(如何更好地描述这个问题的任何帮助将不胜感激)
答案 0 :(得分:1)
答案 1 :(得分:0)
只有一个User模型具有user_type属性(student = 0,teacher = 1,faculty = 2),然后是您需要的所有属性(gpa,salary等)。如果是学生,请将工资字段保留为NULL,如果是教师,则将gpa字段保留为NULL等。
然后你的消息表将只有sender_id和recipient_id。