用于将消息与一组特定用户或所有用户相关联的表结构

时间:2012-07-25 19:54:06

标签: mysql sql database database-design

关于我的想法的几句话

开展一些基于网络的教育项目。为这个项目创建问答系统。我无法弄清楚存在一些逻辑上的困难:

用户之间有老师和学生。每个学生在注册期间选择一些课程。

我有5个表:userscourseslessonsquestionsanswers

可能有两种类型的问题:

  1. User基于。例如,当教师想要向特定用户发送问题时,反之亦然(用户也可以向教师发送问题)。

  2. 基于
  3. Course-lesson组合。例如,教师希望根据课程向所有课程听众发布问题,他们目前在课堂上。

  4. 我做了什么

    我创建了questions from-to(qft)表

    CREATE TABLE `questions from-to` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `qid` int(11) unsigned NOT NULL,
      `from_uid` int(11) unsigned NOT NULL,
      `to_uid` int(11) unsigned NOT NULL,
      PRIMARY KEY (`id`),
      KEY `qft.from_uid_users.id` (`from_uid`),
      KEY `qft.to_uid_users.id` (`to_uid`),
      KEY `qft.qid_qe.id` (`qid`),
      CONSTRAINT `qft.from_uid_users.id` FOREIGN KEY (`from_uid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `qft.qid_qe.id` FOREIGN KEY (`qid`) REFERENCES `questions_and_exercises` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `qft.to_uid_users.id` FOREIGN KEY (`to_uid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    看起来像那样

    • qid - 是问题ID,将此表与基于questions的表格相关联 在id
    • from_uid - 来自用户ID(问题发件人ID),将此表格与基于users的表格相关联 在id
    • to_uid - 对于用户ID(问题接收者ID),将此表与users连接起来 在id

    所以我试图为两者创建一些通用的解决方案:

    • 学生和老师,以便他们可以向对方发布问题。的确定

    • 老师可以向某些用户发布具体问题。的确定

    但是有问题

    问题是

    如果,老师想要为所有课程听众发布问题怎么办?我已经有user-course关系表,但是,目前我需要将一个一个用户ID添加到questions from-to表中,以便他们可以收到问题。我不知道,如何针对这两种情况设计此表:基于course-lesson组合的“群体质询”和“用户 - 用户”类型的问题发布(教师向特定学生发送问题,反之亦然)

    有什么建议吗?

2 个答案:

答案 0 :(得分:1)

一种可能性是在to_uid中有一个特殊代码,您的应用程序可以将其解释为“向所有用户显示”。当遇到to_uid -1(或您选择的任何内容)时,它会对所有听过该课程的学生进行选择,并显示问题,就好像他们的ID都已在{{1}中单独列出一样}。根据应用程序的组织方式,您只需在少数几个位置执行此特殊检查。

答案 1 :(得分:0)

有点类似于此处描述的问题。看看建议的解决方案。

Messaging System