1

关于我的想法的几句话

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

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

我有 5 张桌子:users, courses, lessons, questions, answers.

可能有两种类型的问题:

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

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

我做了什么

我创建了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组合的“大规模提问”和“用户-用户”类型的问题发布(教师向特定学生发送问题,反之亦然)

有什么建议么?

4

2 回答 2

1

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

于 2012-07-25T19:58:13.680 回答
0

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

消息系统

于 2013-03-22T14:39:40.417 回答