背景
-我正在研究一个允许企业创建几种类型的预定义奖励的系统,例如:
-每种奖励类型都有其自己的进度指示器:
-对于每种类型的奖励,系统必须跟踪并记录每个用户的进度
-当用户达到奖励目标并兑现时,应重置奖励类型的分数。
实现此功能的最佳数据库设计是什么?请记住,该设计应着眼于可扩展性,以便将来包含多种奖励类型。
答案 0 :(得分:0)
如果您希望它具有可扩展性,则应仅基于userId-rewardId
组合存储单个值:
CREATE TABLE reward_progress (
user_id int NOT NULL, -- reference to the user
reward_id int NOT NULL, -- reference to the reward (or code if you choose)
val int NOT NULL DEFAULT 0, -- value is tracked here
date_achieved timestamp -- when reward conditions were met. NULL if not yet.
);
ALTER TABLE reward_progress
ADD CONSTRAINT reward_progress_pkey
PRIMARY KEY (user_id, reward_id); -- order is important here
这里的顺序很重要,因为您将仅按user_id
(“为给定用户提供所有进度行”)或按user_id
和reward_id
(“进度”给定区域中给定用户的数量”)。