ms-sql和下载积分扣除问题
两个表
new 表:
newID int 主键
newTitle varchar(50)
newContent varchar(4000)
newTypeID int 外键
newType表:
newTypeID int 主键
newTypeTitle varchar(50)
这两个表有主外键的关系(new.newTypeID和newType.newTypeID)
假如newType表中有一条记录:
insert into newType (newTypeID,newTitle) values(1,'企业新闻')
而new表有N条记录的newTypeID的值都为1,
删除newTypeID=1的记录,ms-sql能不能自动删除new表中newTypeID=1的所有记录(我理解因为有主外键的关系,能自动删除)
另外还有一个问题是,现在网站提供下载,下载之后需要扣除会员一些积分,
需要下载完了之后才扣除积分,怎么样知道已经下载完了,这样的功能怎么实现啊?
以上两个问题希望高手指点 --------------------编程问答-------------------- 可以的.
实现方式也有多种.
最基本的就是人为的写两条语句来删除.
先删除从表记录,再删除主表记录.
比如:
delete from [new] where newTypeID=1
delete from newType where newTypeID=1
还可以设置触发器来删除
使用instead of触发器,建立在主表, 删除时,先删除从表,再删除主表. 跟写语句的方式类同.
还可以在建表,或创建或修改主从关系时使用命令指定:
ON DELETE CASCADE
指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
具体的,都是死语法,你参考一下联机丛书就知道了. --------------------编程问答-------------------- 另:
还可写个存储过程封装起来.
或
写个事务. --------------------编程问答-------------------- 关于下载积分扣除的问题.
一般的解决方式是两种:
1,文件以数据流方式存放在数据库. 通过一个 download 页,读出数据,声明content type,并将数据流输出. 在数据输出完毕后,就认为用户进行了下载. 除非你让用户安装你的插件,否则无法检测用户是否下载完毕.
2,文件以文件方式存放地磁盘,服务器上以组件或iis api插件方式验证来源是否合法,如果合法,才会输出文件, 同样的,也会在数据处理页扣除积分,并无法做到用户是否已下载完毕.
第一种,实现相对容易,第二种技术性要求高一些.
一般除了这两种方式, 还有一种,就是文件也以文件方式存放磁盘,通过 http环境参数来检测是否盗连或非法进入, 这种方式,效果不好,很容易被绕过验证(比如通过修改http头再提交), 直接把文件下载了. 防止一般的用户还是可以的.
补充:.NET技术 , ASP.NET