150 likes | 270 Views
5 . 3 数据库设计举例. 5.3.1 将用户视图表示为一些表的集合 5.3.2 判断实体之间的关系 5.3.3 列出所有表的关键字 5.3.4 数据库图示化表示方法 ( 选择仓库管理进行设计 ). 5 . 3 . 1 将用户视图表示为一些表的集合. 1. 仓库保管员用户视图 仓库保管员需要随时掌握仓库的入库情况、出库情况、库存情况。仓库保管员的需求就是物资基本情况表( wzbmb )、物资入库表( wzrkb )、物资出库表( wzlkb )、物资库存表 (wzkcb) 、用料单位表( dwbmb )等的集合。
E N D
5.3 数据库设计举例 • 5.3.1 将用户视图表示为一些表的集合 • 5.3.2 判断实体之间的关系 • 5.3.3 列出所有表的关键字 • 5.3.4 数据库图示化表示方法 • (选择仓库管理进行设计)
5.3.1 将用户视图表示为一些表的集合 • 1. 仓库保管员用户视图 • 仓库保管员需要随时掌握仓库的入库情况、出库情况、库存情况。仓库保管员的需求就是物资基本情况表(wzbmb)、物资入库表(wzrkb)、物资出库表(wzlkb)、物资库存表(wzkcb)、用料单位表(dwbmb)等的集合。 • (1)判断用户视图所包含的实体,并为每个实体建立一个表。 • wzbmb( • wzrkb( • wzlkb( • wzkcb( • dwbmb(
5.3.1 将用户视图表示为一些表的集合 • (2)判断每个表的关键字。关键字可能是一个或多个属性组合,先选择关键字,其他属性在后面的步骤中再填入。主关键字是一个唯一的标识符,通过它来区分不同的对象。物资基本情况表(wzbmb)的主关键字是物资编码,物资入库表(wzrkb)的主关键字是日期与入库单编号,物资出库表(wzlkb)的主关键字是日期与出库单编号,物资库存表(wzkcb) 的主关键字是物资编码和日期,单位编码表(dwbmb)的主关键字是单位编码,现将主关键字加入对应的表中。 wzbmb(wzbm, • wzrkb(rq,rkh, • wzlkb(rq,lkh, • wzkcb (wzbm,rq, • dwbmb(dwbm,
5.3.1 将用户视图表示为一些表的集合 • (3)判断每种实体的性质。根据用户需求来确定所需实体的其他属性。 • wzbmb(wzbm,wzmc,xhgg,jldw,price)。 • wzrkb(rkh,rq,wzbm,cgl,sssl,price,ysr)。 • wzlkb(lkh,rq,dwbm,wzbm,qls,sfs,price)。 • wzkcb (wzbm,rq,price,wzkcl )。 • dwbmb(dwbm,dwmc)。
5.3.1 将用户视图表示为一些表的集合 • 2.仓库主管用户视图 • 因为每个单位有多个仓库,每个仓库有多种物资,仓库主管需要随时了解每个仓库的库存量、资金总额,每个仓库存放哪些物资。既要保证生产,又不积压物资,以保证流动资金的周转。仓库主管的需求包括:仓库情况、库存情况、各单位用料情况等。 • (1)判断用户视图所包含的实体,并为每个实体建立一个表。 • 这里有仓库情况表(wzckbmb)、库存情况表(wzkcb)、各单位用料情况表(wzhyb): • wzckbmb( • wzkcb( • wzhyb(
5.3.1 将用户视图表示为一些表的集合 • (2)判断每个表的关键字,其他属性在后面的步骤中再填入。仓库情况表(wzckbmb)的主关键字是仓库编码(wzckbm),库存情况表(wzkcb)的主关键字是物资编码和日期,各单位用料情况表(wzhyb) 的主关键字是单位编码和物资编码,现将主关键字加入对应的表中。 • wzckbmb(wzckbm, • wzkcb(wzbm,rq, • wzhyb(dwbm,wzbm,
5.3.1 将用户视图表示为一些表的集合 • (3)判断每种实体的性质。 • 仓库情况表(wzckbmb)除主关键字仓库编码(wzckbm)外,还包括仓库名称(wzckmc)。 • 库存情况表(wzkcb)除主关键字物资编码与日期(wzbm,rq)外,还应包括价格(price),库存量(wzkcl)。 • 各单位用料情况表(wzhyb) 除主关键字单位编码(dwbm)和物资编码(wzbm)外,还应包括汇总期(rq),总金额(zje)。 • wzckbmb(wzckbm,wzckmc) • wzkcb(wzbm,rq,price,wzkcl) • wzhyb(dwbm,wzbm,rq,zje)
5.3.1 将用户视图表示为一些表的集合 • 3.物资用户的用户视图 • 每个使用物资的用户需要随时了解哪个仓库存放哪些物资,库存量是多少,能否满足生产需要,即需要掌握仓库库存情况、本单位用料情况等。 • (1)判断用户视图所包含的实体,并为每个实体建立一个表。 • 这里有库存情况表(wzkcb)(该表在前面已设计)、本单位用料情况表(dwylhyb)。 • (2)判断每个表的关键字,其他属性在后面的步骤中再填入。本单位用料情况表(dwylhyb) 的主关键字是单位编码和物资编码,现将主关键字加入对应的表中。 • dwylhyb(dwbm,wzbm, • (3)判断每种实体的性质。本单位用料情况表(dwylhyb) 除主关键字单位编码(dwbm)和物资编码(wzbm)外,还应包括汇总期(rq),总金额(zje): dwylhyb(dwbm,wzbm,rq,zje)。
5.3.2 判断实体之间的关系 • (1)1:N的联系,应将“1”表的主关键字加入到“N”表中作为外部关键字。 • 在上述用户视图中,仓库情况表wzckbmb (wzckbm,wzckmc)与库存情况表wzkcb(wzbm,rq,price,wzkcl)就是1:N的联系。因为每个仓库可以存放多种物资,所以应将仓库情况表wzckbmb表中的wzckbm加入到库存情况表wzkcb表中作外部关键字。 • wzkcb(wzbm,rq,price,wzkcl,wzckbm)
5.3.2 判断实体之间的关系 • (2)M:N的联系,应建立一个新表,新表的关键字是原始表中多个关键字的组合。 • 在上述用户视图中,用料单位与物资是M:N的联系,即每个用料单位可以领用仓库中的任何一种物资,反之每一种物资可被任一单位领用。 • 物资出库表(wzlkb)就是用料单位与物资基本情况表(wzbmb)之间加入的表,如果出库单是一单多料制即一张领料单填写多种物资,物资出库表(wzlkb)的关键字就必须包括出库日期(领料日期)和物资编码。
5.3.3 列出所有表的关键字 • (1)主关键字:所有表的关键字均在前面列出。但是要根据实际需求,进行调整,如果各个仓库允许存放相同物资的话,那么库存情况表wzkcb中的(wzckbm)也必须包含在主关键字组合中。同样,wzckbm也应包含在物资入库表wzrkb和物资出库表wzlkb的主关键字组合中。 • (2)可选关键字:可选关键字可以作为主关键字的属性或者属性的组合,但它不是主关键字。可选关键字并不常见,在上述表中不存在。 • (3)第二关键字:第二关键字是指与检索数据紧密相关的属性。如果系统中有第二关键字则可在这一步明确。 • (4)外部关键字:第2章已指出,它是指一个表的属性或属性的集合,必须与另一个表某行的主关键字相匹配。
5.3.5 汇总各用户视图的设计结果 • 1.合并表 • 检查各用户视图表,看是否有重复表或主关键字相同的表,如果有则进行合并处理。 • 例如:本单位用料情况表(dwylhyb)和各单位用料情况表(wzhyb)的主关键字相同,且dwylhyb是wzhyb的一个子集,所以可将二者合并为一个表wzhyb,取消dwylhyb表。
5.3.5 汇总各用户视图的设计结果 • 2. 检查属性命名是否冲突 • (1)wzkcb、wzlkb、wzrkb三表中的wzckbm属性名相同,代表的内容不相同。在wzckbmb表中表示具体仓库的库存量,在wzlkb表中表示出库物资由哪个仓库发出,在wzrkb表中表示物资存储在哪个仓库。三表对应才能结算出正确的库存量。 • (2)wzkcb、wzckb、wzrkb三表中的rq属性名相同,但代表的内容不相同。在wzkcb表中表示计算结存时的日期,在wzrkb表中表示物资入库的日期,在wzlkb表中表示出库时的日期。 • (3)解决方法1。wzkcb表中的wzckbm不变,将物资入库表wzrkb中的wzckbm改为rkckbm,物资出库表wzlkb中的wzckbm改为ckckbh。将wzkcb表中的rq改为jsrq, 将wzlkb表中的rq改为ckrq, 将wzrkb表中的rq改为rkrq。 • (4)解决方法2。可以不作任何处理,即省去(3)。上述属性的命名冲突只是一个假象,实际上没有冲突,因为属性的部分含义已在表名上体现。尽管wzkcb、wzlkb、wzrkb三表中的rq属性名相同, 但与它们所在表相联系, 各自代表的内容已十分清楚,但它们的类型及长度必须一致。在此提出冲突问题,目的是告诉读者,在实际设计数据库时检查冲突是必不可少的工作。
5.3.5 汇总各用户视图的设计结果 • 3.列出所有的表组成一个数据库。 • 为了将主关键字排列在一起,可以重新调整属性的顺序。 • wzbmb(wzbm ,wzmc,xhgg, jldw, price) • wzrkb(rkh,rq, wzckbm,wzbm, cgl ,sssl ,price, ysr) • wzlkb(lkh,rq,wzckbm, wzbm,dwbm,qls,sfs,price) • wzkcb(wzbm,rq,wzckbm,price,wzkcl) • dwbmb(dwbm,dwmc) • wzckbmb(wzcbm,wzckmc)