我的系统中有近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(如上所述)
是否有更加压缩的解决方案?
答案 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
建议您以此格式编写每个设计。