具有许多不同类型用户的私人消息的数据库模式

时间:2014-06-09 08:02:08

标签: database schema

我的系统中有近4种类型的用户:

1-学生

2-教师

3-管理员

4-父母

他们必须能够互相发送私人消息。

当然,管理员和教师必须能够将PM发送给所有课程学生和所有学期学生......

问题是,我不知道如何使用外键设置数据库表??

是否正确:

表:Private_Messages(pmid,pmsubject,pmbody,pmdate)

表:Teacher_Student_Private_Message(tspmid,pmid,tid,sid,sender)

表:Admin_Student_Private_message(aspmid,pmid,aid,sid,sender)

表:Admin_Teacher_Private_Message(如上所述)

表:Admin_Parent_Private_Message(如上所述)

表:Teacher_Parent_Private_Message(如上所述)

表:Admin_Course_Private_Message(如上所述)

表:Teacher_Course_Private_Message(如上所述)

表:Admin_Term_Private_Message(如上所述)

是否有更加压缩的解决方案?

1 个答案:

答案 0 :(得分:0)

  

您应该拥有一系列跨越所有四个组的用户ID。   然后,您只需要一个表用于所有消息类型。 - Thilo

这给出了表格和陈述。表包含使其语句成立的行。

// assumes teacher(tid,...),student(sid,...),admin(aid,...),parent(pid,...)

user(uid) -- user [uid] is teacher or student or admin or parent
user_is_teacher(uid,tid) -- user [uid] is teacher [tid]
user_is_student(uid,sid) -- user [uid] is student [sid]
user_is_admin(uid,aid) -- user [uid] is admin [aid]
user_is_parent(uid,pid) -- user [uid] is parent [pid]

user_is_term_student(uid) -- user [uid] is term student
user_is_course student(uid) -- user [uid] is course student

message_was_sent(mid,sid,rid,date,...) -- message [mid] was sent by user [sid] to user [rid] at [date] ...
message_was_private(mid) -- message [mid] was private

(请注意,如果你刚刚发表了关于用户ID的陈述,你会发现它们很简单并非不可能。)

超级键是具有唯一值的列。密钥是不包含超级密钥的超级密钥。把它们弄清楚。以下是一些:

user_is_teacher keys (uid),(tid)
message_was_sent key mid,(sid,rid,date)

外键是列,其值是某些键列的值。把它们弄清楚。以下是一些:

user_is_teacher fk uid to user uid, fk tid to teacher tid
message_was_sent fk sid to user uid, rid to user uid

建议您以此格式编写每个设计。