药品进销存管理系统数据库设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
药品进销存管理系统数据库设计
一、基本分析
1.1数据库环境说明
采用的数据库系统:mysql
编程工具:MyEclipse8.0
数据库建模工具:powerdesigner15
1.2 基本功能分析
本设计要实现的是药品进销存管理系统,在设计该系统时,应尽可能贴近实际、便于用户操作.系统在实现上应该具有如下功能:
1.系统要提示用户必须输入正确的用户名和密码才能进入系统.
2. 其功能模块图如下:
二、概念设计
在需求分析的基础上,我们对药品进销存管理系统有了一定的了解。在分析设计概念模型时,首先找出模型所需的实体,然后找到各实体之间的关系,画出E—R模型图。
2.1、实体及其间的关系设计
对于药品进销存系统,我们设计了药品,客户,供货商,仓库,操作员四个实体。
结合实际情况及对数据库设计的方便,各个实体之间的关系如下:
供货商和药品之间应该是存在采购关联,它们之间为多对多关系。
仓库,药品之间存在存储关联,它们之间为多对多关系。
药品,客户之间存在销售关联,它们之间为多对多关系。
操作员,仓库之间存在药品入库和出库关联,它们之间为多对多关系。
2.2 E-R模型图的设计
根据较为详细的需求分析,我们设计出了以下E-R模型图如下.
三、逻辑设计
逻辑结构设计的目的是将ER模型向关系模型转换,注意转换时关系的主键、外键的设置以保持原有的ER模型中实体与实体之间的关系,另外还应当进行规范化处理以消除数据冗余。
3.1 ER图向关系模型的转化(主键标志为
存在冗余的关系,根我们把它拆分成两张或更多张表
3.2、E-R图转换成关系模型所遵循的原则
我们把E-R图转换成关系模型所遵循的原则:
1)每一个实体类型转换成一个关系模式。如实体药品,客户,供货商,仓库,操作员,都可以转化成对应的一个关系模式。关系模型的主键是E-R 模型的标识符,其他属性一样。
2)一个联系可转化为一个关系模式,那么,两端关系的标识符及该联系属性为关系的属性,而关系的标识符为两端实体标识符的组合。
3)我们还涉及到了引用完整性约束,也就是外键的约束,外码的约束贯穿着我们设计的始终,它把我们建立的关系紧密的联系在了一起。
4)我们对关系模式进行了消除数据冗余的处理。应符合第三范式,不允许出现传递依赖、冗余、异常等等。在逻辑设计中形成了关系表后需要对关系
作规范化处理,使每个关系表至少满足第三范式的要求。对违反第三范式的关系我们进行了分析并作了相应的调整。对各关系模式之间的数据依赖进行了极小化处理,消除了冗余。对违反第三范式的关系模式进行了必要的分解和合并。
3.3 表汇总
四、物理设计
4.1 索引设计
关系属性A上的索引是一种数据结构,它可以提高查找在属性A上具有某个特定值的元组的效率。索引通常有助于包含有属性A和常量的查询,但当关系变化很大时,通过扫描关系中所有的元组来找出那些匹配给定条件的元组的操作方式代价太高。故我们设计索引需要对下两方面折中选择。
首先,对某个属性使用索引能极大的提高对该属性值的检索效率,使用该属性时,还可以加快连接。
其次,对关系上某个属性的索引会使得对关系的插入、删除、修改变得复杂和费时。
因此经过分析本系统的功能和需求可知,本系统的药品表中的记录可能相当的庞大,而且基于药品名称或编码的查询和修改相当的频繁,加之在数据库更新和维护过程中对供货商的更新和查询也比较的频繁,而且供货商的数量也可能比较大,综合考量后应为本系统建立如下3个索引,以达到操作的便捷和系统功能的优化。
各表中建立索引的表项:
create unique index khbh_index on tb_client_jbqkb(khbh);
create unique index gysbh_index on tb_gys_jbqkb(gysbh);
create unique index ypbh_index on tb_medicine_jbqkb(ypbh);
create unique index userid_index on tb_username(userid);
五、安全性设计
角色与权限
设立两种级别用户Administrator,Superuser.对每种类型的用户设置不同的权限. Administrator:提供对系统的实际操作功能(适于仓库管理人员)
Superuser:拥有系统的一切权限(适于总经理,系统维护管理人员)
六、用SQL实现设计
经数据库建模后,由模型导出数据库的SQL语言,将SQL语言导入到MySQL数据库中建立所有的数据表。
/*==============================================================*/
/* Table: tb_buy_detaile */
/*==============================================================*/ create table tb_buy_detaile
(
rklsh int not null auto_increment,
rkdjh varchar(20),
ypbh varchar(20),
rksl int,
rkdj float,
rkje float,
rkrq datetime,
kcsl int,
kcsts char(4),
primary key (rklsh)
);
/*==============================================================*/ /* Table: tb_buy_main */
/*==============================================================*/ create table tb_buy_main
(
rkdjh varchar(20) not null,
pzs int,
rksl int,
rkje float,
rkrq datetime,
jbr varbinary(10),
sts varchar(2),
gysbh varchar(20),
primary key (rkdjh)
);
/*==============================================================*/ /* Table: tb_client_hkqk */
/*==============================================================*/ create table tb_client_hkqk
(
hklsh varchar(20) not null,
xslsh int ,
khbh varchar(20),
hkrq datetime,
qkje decimal(2,0),
skhj decimal(2,0),
ljye decimal(2,0),
primary key (hklsh)
);
/*==============================================================*/ /* Table: tb_client_jbqkb */
/*==============================================================*/ create table tb_client_jbqkb
(
khbh varchar(20) not null,
khmc varchar(80),
pym varchar(10),
khdz varchar(80),