关于下载扣积分问题,请各位前辈指点一二

wutongshu012 2010-07-12 10:49:32
我想实现下载一个文件只扣一次积分,以后再下载就不扣了,我现在就是理不清数据库之间的关系,以及实现的思想,希望各位前辈帮帮忙。。指点指点我啊。。。。
...全文
67 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bo3235 2010-07-12
[Quote=引用 7 楼 wutongshu012 的回复:]
我想说的是,如果这样做,比如一个网站有1万个用户,如果有一个下载文件,用最极端的想法,每人都下载,那么新建的数据库就要有1万条数据,如果有1000个下载资源或更多下载资源呢,以后岂不是数据库会很大,查找起来也会很慢吗?
[/Quote]

下载文件前仅是检查下数据库和可能的INSERT操作,做成一个事物处理过程. 同时有1000个请求,数据库系统还是能处理过来的,如果不行的话,可以考虑你的数据库独立出来,升级CPU和内存了,当然数据记录大的时候是要考虑查询效率的(如做索引,分表)。

而实际情况是,你更多时候是在关注你的文件服务器的负载,而你的数据库服务器运行的非常稳当.
回复
wutongshu012 2010-07-12
我想说的是,如果这样做,比如一个网站有1万个用户,如果有一个下载文件,用最极端的想法,每人都下载,那么新建的数据库就要有1万条数据,如果有1000个下载资源或更多下载资源呢,以后岂不是数据库会很大,查找起来也会很慢吗?
回复
bo3235 2010-07-12
[Quote=引用 4 楼 theforever 的回复:]
这个有很多实现的方法,具体看情况:

1.以文件为主,建立一个文件下载表:记录ID,文件ID,下载用户名……
 这样下载的时候,可以根据当前用户到表里取,看有没有,如果有就不扣分,没有就扣分并进入该表记录。
 这个的作用,还可以在文件信息页或下载页显示所有其它下载本文件的用户,就象CSDN这样的方式一样。当然,只应该取前若干名:TOP N。

2.以用户为主,建立一个用户下载表:记录I……
[/Quote]

无论是您的任何一种方法,其实质都是,文件【实体】 N ------ N 用户【实体】 这样的实体关系(多对多),通常都是设计一张关联表,至于谁排前谁排后,并无太大的区分。
回复
wutongshu012 2010-07-12
我想说的是,如果这样做,比如一个网站有1万个用户,如果有一个下载文件,用最极端的想法,每人都下载,那么新建的数据库就要有1万条数据,如果有1000个下载资源或更多下载资源呢,以后岂不是数据库会很大,查找起来也会很慢吗?
回复
这个有很多实现的方法,具体看情况:

1.以文件为主,建立一个文件下载表:记录ID,文件ID,下载用户名……
 这样下载的时候,可以根据当前用户到表里取,看有没有,如果有就不扣分,没有就扣分并进入该表记录。
 这个的作用,还可以在文件信息页或下载页显示所有其它下载本文件的用户,就象CSDN这样的方式一样。当然,只应该取前若干名:TOP N。

2.以用户为主,建立一个用户下载表:记录ID,用户名,文件ID……
 这个判断原理同上。
 这个的作用,是可以在用户信息页里显示该用户的最近下载信息(TOP N)。

3.合二为一。其实无论是1还是2,都可以起到合二为一的作用,一个表既可以作为文件下载信息提取,也可以作为用户下载信息提取。数据量其实也是一样的,都是一个用户下载一个文件时产生一条,一一对应。
 所以等于怎么做都可以。
回复
bo3235 2010-07-12
新下载的需要 INSERT一次,再次下载不会INSERT

过程是先查询该表,判断当前用户ID 和对应资源ID是否同时存在于一条记录中
如果有{不需要任何动作}
没有{增加新记录,扣分动作}

这个方案应该是比较优雅的方案了. 不过也期待更好的方案
回复
wutongshu012 2010-07-12
那也就是说每次别人下载完都要往新建的表里存一次文件编号和用户编号。。谢谢楼上回答,不知道还有没有其他方法啊????
回复
bo3235 2010-07-12
单独建立一张表,字段内容为:文件编号,用户编号 再次下载的时候判断文件编号和用户编号是否存在。
回复
SNOYC 2010-07-12
你不会用触发器啊。。
回复
bo3235 2010-07-12
[Quote=引用 10 楼 snoyc 的回复:]
那需要那么麻烦啊

把下载资源作为主体。这个表里增加一个字段,字段类型根据实际情况设置,看你这情况最好设大一点,记录下载用户的ID,以“,”隔开

下载的时候判断下ID是否 IN 这个字段

我不相信每个资源都是100%的人来下载的,所以感觉用这个方法比较折中
[/Quote]

从单个问题解决角度来说,这样设计是没有问题的。但从扩展角度,常规的思路角度看,你的方法确实不敢苟同,例如,要知道一个人最近下载了什么,怎么查?如果还要知道时间,又怎么弄?还不整死你.



回复
SNOYC 2010-07-12
那需要那么麻烦啊

把下载资源作为主体。这个表里增加一个字段,字段类型根据实际情况设置,看你这情况最好设大一点,记录下载用户的ID,以“,”隔开

下载的时候判断下ID是否 IN 这个字段

我不相信每个资源都是100%的人来下载的,所以感觉用这个方法比较折中

回复
wutongshu012 2010-07-12
不知道还有没有其他方法。。
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告