在用户信息关系模式中,用户是按照权限分类的,职位不同权限不同,这样该关系模式就存在了非主属性对码的传递依赖:职工号→职位,职位→权限,所以应将用户信息分解为:
用户信息(职工号,姓名,用户名,用户口令,职位)
职位权限信息(职位,权限)
但本系统不考虑职工信息的管理,为了使销售员编号与销售员的职工号连系起来,并能通过职工姓名和职位来修改用户信息所以把员工的部分信息(职工号,姓名,职位)跟用户基本信息(用户名,用户口令,权限)合成了用户信息(职工号,姓名,用户名,用户口令,职位,权限)以便于系统功能的实现,所以在此不采用分解模式,仍采用原模式。
药品销售信息中有大量的数据冗余,且不够明确。现将其分解为:
药品销售主表(销售编码,销售日期,销售员编号,总金额)
药品销售子表(销售编码,销售日期,药品编码,药品名称,单价,数量,单位,金额)
其中“金额”由“单价”和“数量”乘积求得,“总金额”由同一销售单内不同药品的“金额”求和得到。这样不仅方便查询销售总额,也加快了合计数据的速度,也有利于程序的实现。
用户信息模式和药品销售子表模式是为了降低连接操作,减少外键和索引数目对原模式进行重建或分割得来的。更重要得是,这样不但可以提高查询速度,而且有利于系统实现。
3.3数据表设计
通过对关系模式的优化,得到六个基本表:
表3-1药品信息表
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
MedicineCode Char 6 Primary Key Not Null 药品编码
MedicineName Varchar 32 Not Null 药品名称
MedKindCode Char 1 Foreign key Not Null 药品类别代码
Price Money 8 售价
ListPrice Money 8 厂价
Number Int 4 库存量
Unit Char 2 单位
UsefulLife Datetime 8 有效期至
表3-2供应商信息
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
FirmCode Char 4 Primary Key Not Null 供应商编码
FirmName Varchar 16 Not Null 供应商名称
Link Varchar 12 联系人
LinkTell Varchar 11 联系电话
City Varchar 8 所在城市
表3-3药品销售主表
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
SaleNo int 4 Primary Key Not Null 销售编码
WorkNo Char 2 Foreign key Not Null 销售员编码
SaleDate DateTime 8 销售日期
Amount Money 8 总金额
表3-4药品销售子表
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
SaleNo int 4 Primary Key Not Null 销售编码
Medicinecode Char 6 Foreign key Not Null 药品编码
MedicineName Varchar 32 Not Null 药品名称
Price Money 8 售价
Number Int 4 数量
Unit Char 2 单位
Amount Money 8 金额
表3-5药品类别索引信息
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
MedKindCode Char 1 Primary Key Not Null 药品类别代码
KindExplanation Varchar 16 Not Null 类别说明
表3-6用户信息
字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名
WorkNo Char 2 Primary Key Not Null 职工号
Name Varch