假设我Tutors
采取online webclasses
并创建learning packs
。 online webclasses
和learning packs
都可以按students
进行评分,最后tutor's
评分是classes
和{{1}的所有评分的简单平均值}。
这是我们当前packs
表的表结构 -
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
和Rating
评分,我需要完全相同数量的class
表字段。
我想,如果要单独找到类和包等级,那么单独的表会减少要查找的记录数。但是,因为在我们的情况下,只需要导师评级(涉及课程和包),这就是为什么所有评级都被放在一起。
答案 0 :(得分:3)
更详细的模型。
如果只对评分表感兴趣,可以使用:
或者,将两种模型合并为:
答案 1 :(得分:0)
如果您认为最终会有更多需要评级的实体,那么您需要创建更通用的内容(而不是非常适合db-philosophy)。
ratings
-------
id
voterClass
voterId
subjectClass
subjectId
vote
date(s)
通过使用此设计,您会忘记FK和参照完整性。但它非常灵活,使用正确的索引它具有很高的可扩展性。此外,当删除实体(主题)时,选票仍然存在。此设计可以避免重复字段和表格。
答案 2 :(得分:0)
使用mySQL workbench。它的跨平台,效果很好。
MySQL workbench还满足您在stackoverflow上的general-purpose-remote-data-backup-and-download-including-innodb-support问题的所有条件
BTW:使用<ctrl>+<G>
转发工程师数据库。