简单说说我的想法
从事一些基于网络的教育项目。为这个项目创建问答系统。有一些逻辑上的困难我想不通:
用户之间有老师和学生。每个学生在注册时选择一些类(class)。
我有 5 个表:users
, courses
, lessons
, questions
, answers
.
可能有两种类型的问题:
User
基于。例如,当老师想向特定用户发送问题时,反之亦然(用户也可以向老师发送问题)。Course-lesson
基于组合。例如,老师想根据类(class)向所有类(class)听众发布问题,他们目前正在上课。
我做了什么
我创建了 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
所以我尝试为两者创建一些通用解决方案:
学生和老师,这样他们就可以互相发布问题。 好的
教师可以向一些用户发布具体问题。 好的
但是有一个问题
问题是
如果老师想为所有类(class)听众发布问题怎么办?我已经有 user-course
关系表,但是,目前我需要将一个一个的用户 ID 添加到 questions from-to
中表,以便他们可以收到问题。我不知道,如何为这两种情况设计此表:基于 course-lesson
的“大规模提问”组合和“用户-用户”类型的问题发布(教师向特定学生发送问题,反之亦然)
有什么建议吗?
最佳答案
一种可能是在 to_uid
中有一个特殊代码,您的应用程序知道该代码解释为“向所有用户显示”。当它遇到 -1 的 to_uid
(或您选择的任何内容)时,它会选择所有收听该类(class)的学生,并显示问题,就像他们的 ID 都单独列在 to_uid
。根据您的应用程序的组织方式,您应该只需要在少数地方实现这种特殊检查。
关于mysql - 用于将消息与一组特定用户或所有用户相关联的表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11657565/