我正在制作一个类似于 Yahoo Answers 的问答网站。它将有一个积分系统,用户可以在其中对答案进行投票,但我不知道我是否应该删除用户在某个主题上获得的积分,如果它被删除(如果他们有任何问题,我应该把被删除的积分加回去票)。这引出了我的主要问题:最好的方法是什么?
我制作了一张points
表格,每当用户获得积分时,它就会记录在points
表格中,然后从users
表格的总数中添加/减去。
但是,如果一个问题被删除,我将如何设法减去所获得的分数(并将因反对票而失去的分数加回来)?
我的表的结构points
是(我刚刚做了一个SHOW CREATE TABLE points
查询):
CREATE TABLE `points` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`point_user` int(11) NOT NULL,
`question_id` int(11) NOT NULL,
`timestamp` int(25) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
和users
表:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`fname` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`lname` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`confirm_key` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
`user_pic` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
`user_title` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`moderator` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'false',
`deleted` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no',
`suspended` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no',
`points_count` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
我只是不知道如果它被删除,删除/归还问题上获得/丢失的分数是否是个好主意。
我知道 Stack Overflow 可以做到这一点,但他们有一个更先进的系统。