Mysql——一道简单的数据库设计题

标签 mysql database-design

假设我有导师参加在线网络类(class)并创建学习包在线网络类(class)学习包都可以由学生进行评分,最后导师的评分是所有类(class)的简单平均数他的类(class)的评分。

这是我们当前的 Ratings 表的表架构 -

CREATE TABLE IF NOT EXISTS `Ratings` (
  `id_rating` int(10) unsigned NOT NULL auto_increment,
  `id_teacher` int(10) unsigned default NULL COMMENT 'the teacher who created the class/pack',
  `id_lp` int(10) unsigned default NULL  COMMENT 'the id of the learning pack',
  `id_wc` int(10) NOT NULL default '0' COMMENT 'the id of the webclass',
  `id_user` int(10) unsigned NOT NULL default '0' COMMENT 'the user who has rated',
  `rate` int(10) unsigned NOT NULL default '0',
  `cdate` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `udate` timestamp NULL default NULL,
  PRIMARY KEY  (`id_rating`),
  KEY `Ratings_FKIndex1` (`id_user`),
  KEY `id_lp` (`id_lp`),
  KEY `id_wc` (`id_wc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

目前,类和包评级都输入到同一个表中(id_wcid_lp 相应地输入 - 一个被输入,另一个是 NULL 用于每条评级记录)。

所以,我的问题是 -
这种架构是正确的还是将 classpack 评级分开更好?为什么或者为什么不?对于 classpack 评级,我需要完全相同数量的 Rating 表字段。

我想,如果要分别查找类别和包装评级,那么单独的表格会减少要查找的记录数。但是,由于在我们的案例中只需要导师评分(涉及类(class)和小组),这就是将所有评分放在一起的原因。

最佳答案

更详细的模型。

  • 大学的老师也可以上课。
  • 一个类(class)可能有不止一位老师。
  • 同一主题可能有几门类(class),由不同的老师教授。
  • 只有参加类(class)的学生才能对类(class)进行投票(评分)。
  • 学习包是关于某个主题(数学、生物)的。
  • 一个学习包可以有多个作者。
  • 从技术上讲,学生也可以编写学习包。
  • 只有使用学习包的成员(member)才能对学习包进行评分。
  • 虽然作者可以为包投票,教师可以为他们的类(class)投票,但这些投票将被忽略。

alt text

如果只对评分表感兴趣,您可以使用:

alt text

或者,将两个模型组合成如下内容:

alt text

关于Mysql——一道简单的数据库设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845173/

相关文章:

php - 从 200 个数字中随机选择 30 个数字

mysql - 需要计数查询的帮助

带有自定义显示的 PHP/mysql 搜索

mysql - 在数据库中设置名称的最佳做法是什么?

sql - 如何证明在 SQL 中使用子选择查询会降低服务器的性能

mysql - 有没有办法在 MySQL 中影响用户定义的数据类型?

php - 错误 2002 (HY000) : Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13) Ubuntu

mongodb - 使用 MongoDB 进行内容标记

sql - 权限表的性能问题

php - 如何防止MySQL sleep 注入(inject)?