2010-10-02 64 views
5

假设我有Tutorsonline webclasses并创建learning packsonline webclasseslearning packs都可以通过students评级,最后tutor's评级是他的classespacks上的所有评级的简单平均值。Mysql - 一个简单的数据库设计问题

这是我们目前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表格字段。

我想,如果分类和分级评分是分开找到的,那么单独的表格会减少要查找的记录数量。但是,因为在我们的情况下只需要导师评级(涉及班级和包),这就是为什么所有评级都放在一起的原因。

+0

使用mySQL工作台,它甚至是由mysql开发人员制作的。 – 2011-01-19 18:36:29

回答

0

如果你认为你会得到更多需要评级的实体,那么你需要创建更通用的东西(而不是非常适合db-philosophy)。

ratings 
------- 
id 
voterClass 
voterId 
subjectClass 
subjectId 
vote 
date(s) 

通过使用这种设计,您忘记了FK和参照完整性。但它非常灵活,使用正确的索引是非常具有伸缩性的。另外,当实体(主体)被删除时,选票仍然存在。这种设计可以避免复制字段和表格。

3

有点更详细的模型。

  • 大学的老师也可以上课。
  • 一个班级可能有多个教师。
  • 对于同一主题,可能会有几个课程,由不同的教师授课。
  • 只有参加班级的学生才能投票(评分)班级。
  • 学习包是一门学科(数学,生物学)。
  • 一个学习包可以有几个作者。
  • 从技术上讲,学生也可以编写学习包。
  • 只有使用学习包的会员才能评定一个包。
  • 尽管作者可以投票选择背包,老师可以投票选择他们的课程,但这些投票将被忽略。

alt text

如果只关心收视率表,你可以使用:

alt text

或者,这两种模式结合成类似:

alt text

+0

感谢您回答这些漂亮的图片,但请您解释一下这个架构如何更好。我只对收视表感兴趣,只对我描述的系统(只有那些实体 - 导师,班级和包)感兴趣。 – 2010-10-04 21:54:29

0

使用mySQL workbench。它的跨平台和卓越的工作。

MySQL workbench visurally see what you are doing with your database. http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

MySQL的工作台也能满足您的所有标准上的计算器

general-purpose-remote-data-backup-and-download-including-innodb-support问题BTW:使用<ctrl>+<G>转发工程数据库。

+0

@ JamesM-SiteGen-其实我在这里问了一个数据库设计提示/想法。您建议的工具可能对您有所帮助,但我无法看到它如何直接回答我的问题。如果你能详细阐述一下?您可以考虑将此作为http://stackoverflow.com/questions/4710954/general-purpose-remote-data-backup-and-download-including-innodb-support问题的解决方案。 – 2011-02-02 10:51:05

+0

确定其完成.. – 2011-02-03 08:02:30