4.2 数据库设计
在本实例中使用的是SQL Server 2000数据库管理系统。数据库服务器安装的位置为本机,数据库名称为communicationserver 。下面将介绍数据库分析和设计、数据表的创建、数据表关系图和创建存储过程的内容。
4.2.1 数据库分析和设计
在本节中,将根据上一节系统功能的设计分析创建各数据表的实体E-R 关系图,它是数据库设计非常重要的一步,下面用E-R 图的形式表示出各实体的属性。
1. 用户E-R 实体图
用户的实体具有用户ID 、密码、姓名、性别、电话、E-mail 、用户权限7个属性,ER 图如图4-5所示。
图4-5 用户E-R 实体图
2. 地区E-R 实体图
地区的实体具有地区编号、地区名称2个属性,E-R 图如图4-6所示。
图4-6 地区E-R 实体图
3. 职务E-R 实体图
职务的实体具有职务编号、职务名称2个属性,E-R 图如图4-7所示。
图4-7 职务E-R 实体图
4. 学校E-R实体图
学校的实体具有学校名称、学校所在地区、在校学生人数3个属性,可用E-R图表示,如图4-8所示。
图4-8 学校E-R实体图
5. 通讯录E-R实体图
通讯录的实体具有联系人姓名、地址、联系电话、所属职务、所在学校、所在单位、所属地区7个属性,E-R图如图4-9所示。
图4-9 通讯录E-R实体图
4.2.2 数据表的创建
在上面一节中讲解了实体的E-R图,本节中将根据E-R图的内容,创建企业信息管理系统中的各数据表,在此系统中共涉及到5个数据表的应用,分别为如下。
1、字段采用camel 风格定义
2、用不同颜色区分字段
●主键:蓝色
●外键:白色
●既是主键又是外键:淡蓝色
●普通字段:青绿
1. 用户信息表
用户信息表(Users)用于存放校园通讯录信息管理系统中所有系统管理用户的信息,用户
管理是每个管理系统中必不可少的,也是比较重要的一部分,本系统中进行了较详细的设计,
表中各个字段的数据类型、大小以及简短描述如表4-1所示。
表4-1 用户信息表TB_Users
字段名称字段类型字段描述
sUserID varchar(10) 用户ID [PK]
sUserName varchar (20) 用户姓名
sUserPassword varchar(10) 记录用户登入本系统时的用户密码sUserSex char(2) 用户性别
sUserEmail varchar(20) 用户E-mail
sUserPhone varchar(20) 用户的联系电话
sUserPurview char(1) 用户权限
2.地区信息表
地区信息表(Client)用于存放校园通讯录信息管理系统中所有地区的信息,地区信息的
管理是系统中比较重要的内容,地区的名称是其中的关键信息,表中各个字段的数据类型、
大小以及简短描述如表4-2所示。
表4-2 地区信息表TB_Area
字段名称字段类型字段描述
sAreaID varchar(20) 地区编号[PK]
sAreaName varchar(50) 地区名称
3. 职务信息表
职务信息表(Compact)用于存放校园通讯录信息管理系统中所有职务的信息,职务信息
的管理是系统中比较重要的内容,职务的名称是其中的关键信息,表中各个字段的数据类型、
大小以及简短描述如表4-3所示。
表4-3 职务信息表TB_Duty
字段名称字段类型字段描述
sDutyID varchar(20) 职务编号[PK]
sDutyName varchar(50) 职务名称
4. 学校信息表
学校信息表(Com_detail)用于存放校园通讯录信息管理系统中所有学校的信息,学校信息的管理是系统中比较重要的内容,学校名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-4所示。
表4-4 学校信息表TB_School
字段名称字段类型字段描述
sSchoolID varchar(20) 学校编号[PK]
sSchoolName varchar(50) 学校名称
iStudentNum int 学校人数
sAreaID_FK varchar(20) 地区编号[FK]
5. 通讯录信息表
通讯录信息表(product)用于存放校园通讯录信息管理系统中所有通讯录的信息,通讯录信息的管理是系统中比较重要的内容,联系电话是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-5所示。
表4-5 通讯录信息表TB_AddrList
字段名称字段类型字段描述
iAddrID int 通讯录编号(自动编号)[PK] sLinkName varchar(50) 联系人姓名
sAddress varchar(20) 地址
sLinkPhone varchar(20) 联系电话
sUnitName varchar(50) 工作单位
sSchoolID_FK varchar(20) 学校编号[FK]
sDutyID_FK varchar(20) 职务编号[FK]
sAreaID_FK varchar(20) 地区编号[PK]
4.2.3 创建视图
学校信息视图表V_SchoolInfo
字段名称字段类型字段描述
sSchoolName varchar(50) 学校名称
sAreaName varchar(50) 地区名称
sLinkName varchar(20) 联系人姓名
sDutyName varchar(20) 职务名称
sLinkPhone varchar(20) 联系电话
create view V_SchoolInfo
as
select sSchoolName,sAreaName,sLinkName,sDutyName,sLinkPhone
from TB_AddrList,TB_School,TB_Duty,TB_Area
where TB_AddrList.sSchoolID_FK=TB_School.sSchoolID and TB_AddrList.sDutyID_FK=TB_Duty.sDutyID and TB_AddrList.sAreaID_FK=TB_Area.sAreaID
4.2.4 数据表关系图
在学校通讯录信息管理系统中各数据表的关系图,如图4-10所示。在TB_School数据表中,TB_Area数据表的sDutyID_FK字段作为外键。在TB_AddrList数据表中,TB_School 数据表的sSchoolID_FK字段、TB_Area数据表中的sAreaID_FK字段和TB_Duty数据表中的sDutyID_FK字段作为外键。
图4-10 数据表关系图
4.2.5 创建存储过程
因为使用存储过程可以给系统带来优化,所以系统将很大程度地使用存储过程,在系统中共应用了10个存储过程,以Add开头的存储过程为系统中信息添加的存储过程,以Update 开头的存储过程为系统中信息修改的存储过程,这些存储过程将会在系统程序文件的后台应用中调用,下面将对系统中应用的存储过程进行解释。
1. AddTB _Users存储过程
AddTB _Users存储过程用于向用户信息表中添加新的用户信息。以下代码表示了这一存储过程。
CREATE PROCEDURE AddTB_Users @sUserID varchar(10),
@sUserName varchar(20),
@sUserPassword varchar(10),
@sUserSex char(2),
@sUserEmail varchar(20),
@sUserPhone varchar(20),
@sUserPurview char(1)
AS
INSERT INTO TB_Users
(
sUserID,
sUserName,
sUserPassword,
sUserSex,
sUserEmail,
sUserPhone,
sUserPurview
)
VALUES
(
@sUserID,
@sUserName,
@sUserPassword,
@sUserSex,
@sUserEmail,
@sUserPhone,
@sUserPurview
)
GO
2. Add 存储过程
Add TB_Area存储过程用于往地区信息表中添加新的地区信息。以下代码表示了这一存储过程。
CREATE PROCEDURE AddTB_Area
@sAreaID varchar(20),
@sAreaName varchar(50)
AS
INSERT INTO TB_Area
(
sAreaID,
sAreaName
)
VALUES
(
@sAreaID,
@sAreaName
)
GO
3. AddTB_Duty存储过程
AddTB_Duty存储过程用于往职务信息表中添加新的职务信息。以下代码表示了这一存储过程。
@sDutyID varchar(20),
@sDutyName varchar(50)
AS
INSERT INTO TB_Duty
(
sDutyID,
sDutyName
)
VALUES
(
@sDutyID,
@sDutyName
)
GO
4.AddTB_School存储过程
AddTB_School 该存储过程用于往学校信息表中添加新的学校信息。以下代码表示了这一存储过程。
@sSchoolID varchar(20),
@sSchoolName varchar(50),
@iStudentNum int,
@sAreaID_FK varchar(20)
AS
INSERT INTO TB_School
(
sSchoolID,
sSchoolName,
iStudentNum,
sAreaID_FK
)
VALUES
(
@sSchoolID,
@sSchoolName,
@iStudentNum,
@sAreaID_FK
)
GO
5. AddTB_AddrList存储过程
AddTB_AddrList存储过程用于往通讯录信息表中添加新的通讯录信息。以下代码表示了这一存储过程。
@sLinkName varchar(20),
@sAddress varchar(50),
@sLinkPhone varchar(20),
@sUnitName varchar(20),
@sSchoolID_FK varchar(20),
@sDutyID_FK varchar(20)
AS
INSERT INTO TB_AddrList
(
sLinkName,
sAddress,
sLinkPhone,
sUnitName,
sSchoolID_FK,
sDutyID_FK
)
VALUES
(
@sLinkName,
@sAddress,
@sLinkPhone,
@sUnitName,
@sSchoolID_FK,
@sDutyID_FK
)
GO
6. UpdateTB _Users存储过程
UpdateTB _Users存储过程用于修改用户信息表中,符合条件的用户信息,其中密码信息不可以更新。以下代码表示了这一存储过程。
@sUserID varchar(10),
@sUserName varchar(20),
@sUserSex char(2),
@sUserEmail varchar(20),
@sUserPhone varchar(20),
@sUserPurview char(1)
AS
UPDATE TB_Users
SET
sUserID =@sUserID,
sUserName =@sUserName,
sUserSex=@sUserSex,
sUserEmail=@sUserEmail,
sUserPhone=@sUserPhone,
sUserPurview=@sUserPurview
WHERE
sUserID =@sUserID
GO
7. UpdateTB_Area存储过程
UpdateTB_Area存储过程用于修改地区信息表中的地区信息。以下代码表示了这一存储过程。
@sAreaID varchar(20),
@sAreaName varchar(50)
AS
UPDATE TB_Area
SET
sAreaID =@sAreaID,
sAreaName =@sAreaName
WHERE
sAreaID =@sAreaID
GO
8. UpdateTB_Duty存储过程
UpdateTB_Duty存储过程用于修改职务信息表中的职务信息。以下代码表示了这一存储过程。
CREATE PROCEDURE UpdateTB_Duty
@sDutyID varchar(20),
@sDutyName varchar(50)
AS
UPDATE TB_Duty
SET
sDutyID =@sDutyID,
sDutyName =@sDutyName
WHERE
sDutyID =@sDutyID
GO
9. UpdateTB_School存储过程
UpdateTB_School存储过程用于修改学校信息表中的学校信息。以下代码表示了这一存储过程。
@sSchoolID varchar(20),
@sSchoolName varchar(50),
@iStudentNum int,
@sAreaID_FK varchar(20)
AS
UPDATE TB_School
SET
sSchoolID =@sSchoolID,
sSchoolName =@sSchoolName,
iStudentNum =@iStudentNum,
sAreaID_FK=@sAreaID_FK
WHERE
sSchoolID =@sSchoolID
GO
10. UpdateTB_AddrList存储过程
UpdateTB_AddrList存储过程用于修改通讯录信息表中的通讯录信息。以下代码表示了这一存储过程。
CREATE PROCEDURE UpdateTB_AddrList
@iAddrID int,
@sLinkName varchar(20),
@sAddress varchar(50),
@sLinkPhone varchar(20),
@sUnitName varchar(20),
@sSchoolID_FK varchar(20),
@sDutyID_FK varchar(20)
AS
UPDATE TB_AddrList
SET
sLinkName =@sLinkName,
sAddress =@sAddress,
sLinkPhone =@sLinkPhone,
sUnitName=@sUnitName,
sSchoolID_FK=@sSchoolID_FK,
sDutyID_FK=@sDutyID_FK
WHERE
iAddrID =@iAddrID GO