Mysql - 一个简单的数据库设计问题

时间:2010-10-02 09:48:54

标签: mysql database-design

假设我Tutors采取online webclasses并创建learning packsonline webclasseslearning 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

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

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

3 个答案:

答案 0 :(得分:3)

更详细的模型。

  • 大学的老师也可以上课。
  • 一个班级可能有一位以上的老师。
  • 同一科目可能有几门课程,由不同的老师教授。
  • 只有参加课程的学生才能对课程进行投票(评分)。
  • 学习包是一门学科(数学,生物学)。
  • 一个学习包可以有几位作者。
  • 从技术上讲,学生也可以创作学习包。
  • 只有使用学习包的会员才能评分。
  • 虽然作者可以投票支持礼包,但教师可以为他们的班级投票,但这些投票会被忽略。

alt text

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

alt text

或者,将两种模型合并为:

alt text

答案 1 :(得分:0)

如果您认为最终会有更多需要评级的实体,那么您需要创建更通用的内容(而不是非常适合db-philosophy)。

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

通过使用此设计,您会忘记FK和参照完整性。但它非常灵活,使用正确的索引它具有很高的可扩展性。此外,当删除实体(主题)时,选票仍然存在。此设计可以避免重复字段和表格。

答案 2 :(得分: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 workbench还满足您在stackoverflow上的general-purpose-remote-data-backup-and-download-including-innodb-support问题的所有条件

BTW:使用<ctrl>+<G>转发工程师数据库。