【发布时间】:2010-05-09 00:19:28
【问题描述】:
我正在制作一个基于 Web 的小游戏,需要确定将检查 sql 数据库中某些基础数据完整性的逻辑放置在何处。
每个用户都会跟踪分配给他的积分,并通过各种任务奖励积分。我会记录每个任务交易以确保它们不会重复,并在完成时跟踪任务的价值,因为个人奖励水平会随着时间的推移而波动。
到目前为止,我的架构如下所示:
create table player (
player_ID serial primary key,
player_Points int not null default 0
);
create table task (
task_ID serial primary key,
task_PointsAwarded int not null
);
create table task_list (
player_ID int references player(player_ID),
task_ID int references task(task_ID),
when_completed timestamp default current_timestamp,
point_value int not null, --not fk because task value may change later
constraint pk_player_task_id primary key (player_ID, task_ID)
);
所以,player.player_Points 应该是他在task_list 中所有累积任务点的总和。
现在我应该把执行这个的逻辑放在哪里?
我是否应该完全取消player.player_Points 并在每次我想知道总分时进行查询?这似乎很浪费,因为我会在游戏过程中进行很多查询。
或者,在task_list 中放置一个自动更新player.player_Points 的触发器?数据库中的逻辑是否太多,应该只在应用程序中维护这种关系?
谢谢。
【问题讨论】: