由于评分相当静态且数据集很大,因此您可以在用户对影片评分时缓存(反规格化)影片记录中的数据。你需要记录两票和总票数,所以平均数是准确的。您的电影评级是在您需要时动态计算的。这里的架构:
create table movie as (
movie_id int not null primary key,
-- your current columns
vote_count int,
vote_sum int
);
然后使用视图来助阵
create view movie_view as
select
*,
vote_sum/vote_count as vote_average
from movie;
假设你有一个表,看起来像这样:
create table user_movie_vote (
user_id int references user,
movie_id int references movie,
vote int
);
,你可以使用触发器来保持投票总数最新为您:
delimiter ~
create trigger movie_vote_trg after insert on user_movie_vote
for each row
begin
update movie set
vote_count = vote_count + 1,
vote_sum = vote_sum + new.vote
where movie_id = new.movie_id;
end~
delimiter ;
如果投票可以更新,你将需要:
delimiter ~
create trigger movie_vote_trg after update on user_movie_vote
for each row
begin
update movie set
vote_sum = vote_sum + new.vote - old.vote
where movie_id = new.movie_id;
end~
delimiter ;
如果投票可以删除,你将需要:
delimiter ~
create trigger movie_vote_trg after delete on user_movie_vote
for each row
begin
update movie set
vote_sum = vote_sum - old.vote,
vote_count = vote_count - 1
where movie_id = new.movie_id;
end~
delimiter ;
这是优秀的,我需要的!谢谢 – 2010-07-17 02:42:11