假设我有导师
参加在线网络类(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_wc
和 id_lp
相应地输入 - 一个被输入,另一个是 NULL
用于每条评级记录)。
所以,我的问题是 -
这种架构是正确的还是将 class
和 pack
评级分开更好?为什么或者为什么不?对于 class
和 pack
评级,我需要完全相同数量的 Rating
表字段。
我想,如果要分别查找类别和包装评级,那么单独的表格会减少要查找的记录数。但是,由于在我们的案例中只需要导师评分(涉及类(class)和小组),这就是将所有评分放在一起的原因。
最佳答案
更详细的模型。
- 大学的老师也可以上课。
- 一个类(class)可能有不止一位老师。
- 同一主题可能有几门类(class),由不同的老师教授。
- 只有参加类(class)的学生才能对类(class)进行投票(评分)。
- 学习包是关于某个主题(数学、生物)的。
- 一个学习包可以有多个作者。
- 从技术上讲,学生也可以编写学习包。
- 只有使用学习包的成员(member)才能对学习包进行评分。
- 虽然作者可以为包投票,教师可以为他们的类(class)投票,但这些投票将被忽略。
如果只对评分表感兴趣,您可以使用:
或者,将两个模型组合成如下内容:
关于Mysql——一道简单的数据库设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845173/