Предположим, у меня есть репетиторы
, которые берут онлайн-классы
и создают обучающие пакеты
. И онлайн-классы
, и учебные пакеты
могут быть оценены учениками
, и, наконец, оценка репетитора
является простым средним значением всех оценок на его классы
и пакеты
.
Это структура нашей текущей таблицы рейтингов
-
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
будет заменено фактическим значением при генерации. Как мне решить эту проблему?