Mysql - простой вопрос о дизайне базы данных

Предположим, у меня есть репетиторы , которые берут онлайн-классы и создают обучающие пакеты . И онлайн-классы , и учебные пакеты могут быть оценены учениками , и, наконец, оценка репетитора является простым средним значением всех оценок на его классы и пакеты .

Это структура нашей текущей таблицы рейтингов -

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 отдельно? Почему или почему нет? Мне нужно точно такое же количество полей таблицы Рейтинг для рейтинга класса и пакета .

Я думаю, если бы рейтинги класса и пакета были отдельно найдено, то отдельные таблицы уменьшат количество записей, которые нужно искать. Но, поскольку в нашем случае нужны только рейтинги репетиторов (включая классы и группы), поэтому все рейтинги складываются. использовать предупреждения; используйте 5.010; использовать Storable qw (nstore retrieve); локальный $ Storable :: Deparse = 1; локальный $ Storable :: Eval = 1; sub ...

Думаю, лучше всего задать этот вопрос на примере:

use strict;
use warnings;
use 5.010;
use Storable qw(nstore retrieve);

local $Storable::Deparse = 1;
local $Storable::Eval    = 1;

sub sub_generator {
    my ($x) = @_;

    return sub {
        my ($y) = @_;
        return $x + $y;
    };
}

my $sub = sub_generator(1000);
say $sub->(1); # gives 1001
nstore( $sub, "/tmp/sub.store" );
$sub = retrieve("/tmp/sub.store");
say $sub->(1); # gives 1

Когда я сбрасываю /tmp/sub.store , я вижу:

$VAR1 = sub {
            package Storable;
            use warnings;
            use strict 'refs';
            my($y) = @_;
            return $x + $y;
        }

Но $ x никогда не определяется в этом подпункте. Я ожидал бы, что в подгруппе, сгенерированной sub_generator , $ x будет заменено фактическим значением при генерации. Как мне решить эту проблему?

Обратите внимание, что этот вопрос относится к .

6
задан Community 23 May 2017 в 11:55
поделиться