关于一个系统的方案。急,急,急!(200分)

  • 主题发起人 puppyboy
  • 开始时间
P

puppyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我为一个学校做教材的进书和发放管理,遇到一个非常麻烦的数据关联问题!
进书有一个基本库,里面是书籍的基本信息和书籍目前的库存量。
另有一个库是进书的记录表,每进一次书,都在这个表里面插入一条记录,同时更新
基本库中书籍的数量。
学生买书时,在书籍基本库中减去书籍的数量,同时在学生记录表中记下这名学生
买书的记录,还要在学生的基本表中减去这名学生在账上的钱(因为学生的钱是年底结算)。
问题是:当学生毕业了,那么就该把这个学生的所有相关数据删除,但是在删除学生的
买书记录时,触发器会把减掉的书籍数量加到基础库中(因为一般性的删除可以认为是用户
错误操作了,输出记录当作是把书返回库中),这样显眼是不合理的,虽然
可以进行判断,让触发器不执行,但是这样统计书籍数量时,入库,库存,出库就不一致了,
因为一部分出库资料被删除了!
书籍的库存也有同样的问题,如果一种教材库存为0了,而且今后肯定不会再用。
那么从感性上来说用户可以认为这本书没必要在系统中存在了,当用户把这种
书从数据库删除时也有关联问题,因为学生买书的记录中有这本书,而且这些买书记录是
不能删除的,这关系到学生在账上钱的多少。

希望大家给我一个好的解决办法。关键的就是学生毕业了怎么删除学生数据,同时维护
书籍出库,入库
 
虽然从数据结构的优化角度来讲不提倡重复字段,但在实际应用中还是不可避免的。比如你
所碰到的情况就是这样,你可以把学生买书记录的表中至少记录这些信息:学号,姓名,
书名,单价,数量,购买时间。这样的话就算在基本库里没有某本书了,这里还是会有记录
的,学生毕业时只需删除这个表里的有关记录就行了。
 
1:为什么要删除学生记录呢?这些可都是宝贵的资源。如果客户需要进行历史查询之类
的操作那你怎么办?只需多加个字段标志该生是已经离校的学生。
2:如果你一定要删除学生,可以发现同样是往基础库增加书籍数量,但又可分为三种
情况
一:每进一次书
二:用户误操作
三:学生退学或毕业之类
你现在是把前两种做实现逻辑上同样处理,
而你的出库记录和学生表基本信息(学生买书的记录)关联,即两者之间存在依存的关系(学生,书籍)
得到如下逻辑等式:删掉学生记录 = 删掉出库记录
由此对入库书籍有必要增加三个字段标志本书的不同状态
(注意:这时书籍总数为 库存+ 出库)
如: 书名 库存 出库1 出库二 (初始状态)
xx 500 300 20
这时假设三种操作:
1:学生买一本书后
书名 库存 出库 出库二
xx 499 301 20
2:进一本新书
书名 库存 出库 出库二
xx 501 300 20
3:删除一个学生(假设该生曾买走xx一本)
书名 库存 出库 出库二
xx 500 300 21
这样你可知道当前500本没卖掉,卖掉了321本,对应某21本的某些学生已经离校
 
学生数据最好还是删掉,因为一个大学如果有1万人,每人买20本书,那么就有20万条记录
两三年下来记录会非常的多,严重影响数据库的效率。
看来只能增加一项来表示某些书是已离校的学生学生购买的,
不知道还有什么办法。
 
你在书籍库存表中加个东西嘛,A字段代表原始库存,B字段表示该书籍出库总量,入库时,
将数量加在A字段上,那实际库存就等于A-B。
学生毕业时,你将学生基本信息DEL,相关买书记录也DEL,反正查库存时,B字段可以代表历史
出库总量,除非你还有别的情况,比如要细化查询出库过程。
那如果书没有的话,我想你买书记录是在学生毕业时才DEL的,所以本书的出库记录可以暂不
删除啊,库存嘛,删也好,不删也行,书的基本信息是不能删的了。
不过建议还是不要删为好,这些都是历史数据,一般来说是不删的,顶多加个标识,
如果你准备这个系统用N多年的话,要不你就做个功能,
比如说每过一年就做一次数据清理,这是最笨的办法了。没办法谁叫我也笨呢,想不到别的了。[:D]
 
多人接受答案了。
 
顶部