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

标签 mysql sql database database-design

简单说说我的想法

从事一些基于网络的教育项目。为这个项目创建问答系统。有一些逻辑上的困难我想不通:

用户之间有老师和学生。每个学生在注册时选择一些类(class)。

我有 5 个表:users , courses , lessons , questions , answers .

可能有两种类型的问题:

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

  2. 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/

相关文章:

php - Zend php 无法对受影响的行使用 rowCount

php - 从表格中选择一个特定的单元格

php - 基于多选 jQuery 和 PHP 显示 DIV 文本

sql - 如何在 WHERE 子句中两次使用相同的列表?

java - Android:如何使用共享首选项检查 SQLite 的登录是否有效?

SQL:根据另一个表的MIN批量更新表?可能很容易,但卡住了

sql - 以有效的方式存储关系对象的修订

sql - sql 中的 Count() 计算

php - 错误方法 Illuminate\\Database\\Eloquent\\Collection::save 不存在。在 Laravel

python - 主键列表上的 Cassandra 分页不起作用