日期:2014-05-18  浏览次数:20470 次

关于数据表设计遇到一个设计难题,我有多少分全给
我和几个同学最近在用J2EE做"图书馆管理系统",本来以为这个系统还很好做的.
我们的数据库设计思想是这样的(我只说关键的):
订单表---->订单详细表(因为一个订单也有可能采购了多种图书)
图书信息表(图书主键号,图书名,图书作者,图书入库的量,图书现存量等等,不重要的我就不写上来了)
读者信息表,图书借阅表,图书还书表,等等之类的,这些表通过图书主键和读者信息表的主键联系起来,
这样就感觉这个系统差不多了.

可是在于图书馆的工作人员交流的时候才现在不是那么一回事.他们居然要求每一本图书都得有一个有流水号(就是每一本书上的条形码,使用系统时通过此条形码就

可以得到这本书在图书馆中的详细信息)
哎,现在问题来了,因为图书馆采购图书的时候不可能是每本书只进一本回来是吧,它是每本书都进一些回来,那难道现在的关于图书信息表应该这样设计?(图书主键号

也就是条形码,图书库存量,图书现存量,等等字段,)这样设计的话,感觉数据重复性好大啊,如果一本书有100本,那么关于此图书在数据库中的记录就会有100条,而只是

他们的条形码不同而已.感觉很不好啊.

我想到了一种办法,那就是在最先我设计的图书信息表中加入这样的两个字段,"起始条形码","末尾条形码",这样在使用系统的时候也可以根据条形码查到此图书的详

细信息,但是感觉这样非常不好,因为馆中的图书在使用过程中也有可能丢失,报损之类 的,这条形码是一个范围的话,重新贴条形码的话就有些不好控制了.总之就是感

觉这样做,限制性很大,很不利于系统的操作和控制.

现面我感觉的问题就出来,是分析每种书呢(就会有数量属性),还是分析每一本书(就会有状态属性:在架上,外借了,而没有库存量属性)我这样说,可能是使用java习惯了

,总是喜欢使用面向对象来分析现实问题.

我也在考虑怎么样把这图书信息表拆分成多张表,可是一点思想也没有.

你们听明白我的话没有啊?应该怎么样设计好关于图书信息表这一块啊?


------解决方案--------------------
根据实际需求,图书的单品管理是必要的。
用JAVA的习惯描述,你现在的图书信息还是一个类,而分配条码指定单品好比一个实例化的过程。你必须记录这些实例和类的对应信息。
所以你需要一个图书单品信息表,记录图书信息和图书单品的对照关系等信息:
图书单品主键,图书主键,单品条码,条码分配日期,分配人...

图书借阅,图书还书,图书丢失,图书销毁等信息对应的是图书单品。

需要一个分配条码的模块,记录这个将图书信息实例化的过程。
即为每次采购或其他无条码的情况下,为书籍批量或单独地分配条码。
------解决方案--------------------
图书信息表:除了楼主提出来的,应该增加一个自编号,当商品用扫描时,首先要据条码获得
ISBN,没有时可根据自编号,默认情况下与ISBN相等

*通过此条形码就 可以得到这本书在图书馆中的详细信息
这个是ISBN号国际标准码来的,这是一定的(ISBN 只能做为资料不能作为主键)
Select * from BookInfo a join PurchaseOrderDetail b on a.BookID=b.BookID and a.ISBN='?'--条件


订单表---- >订单详细表

PurchaseOrder:

POID int 订单主键
POdate 订单时间
VendorID 供货商编号
BuyStyle--购买方式
OperatorID 操作员
Qty 数量
TotalCount 品种
TotalMoney 码洋合计
RealMoney 实洋合计
go
PurchaseOrderDetail:
PoID 外键
BookID 
price 定价
Qty 数量
discount 折扣


------解决方案--------------------
我碰到过这种问题其实再建个表,里面保存条码(不是图书上的,图书管员自己帖上去的,来区分同一书的不同副本。)和图书的ID(当然可以是书上的条码做主键),在其他如流通库中,只要用后帖上去的条码来代表图书即可。
------解决方案--------------------
同意:gfgen的说法。
可以新建一个表存条码,还有所属的批次只类的信息。
这个表可以是图书的详细信息记录表。可以增加状态啊什么的...
------解决方案--------------------
关注中!