客户资源管理系统数据库设计.docx
《客户资源管理系统数据库设计.docx》由会员分享,可在线阅读,更多相关《客户资源管理系统数据库设计.docx(37页珍藏版)》请在冰豆网上搜索。
客户资源管理系统数据库设计
客户资源管理系统数据库设计
所属课程名称数据库原理与应用
班级07计算机软件工程方向
团队成员张灵惠
吴欢斌
成绩
提交时间:
2009年12月25日
(一)、客户资源管理系统需求分析
1、调查了解学籍管理系统的初步需求
企业的发展离不开客户对企业的认知度、美誉度、忠诚度,为了提高客户满意度必须对客户资源进行科学有效的管理。
客户资源管理系统对客户信息(包括潜在的和已有的客户)进行有效管理和应用,并通过适当的步骤来构建和维护有价值的客户关系。
客户资源管理系统主要功能表
序号
功能名称
功能说明
1
客户信息管理
实现客户的增加、删除、修改和查询、打印,并提供客户分开查询、管理功能
2
市场活动管理
针对各部门的活动主题、内容、类型、客户及负责员工进行合理安排
3
客服管理
查看客户的服务请求,管理客服人员的服务内容、类型、处理等级以及客户的反馈信息和满意程度
4
日程提醒
对未来事件的主题、日期、内容、处理状态进行维护,以保证及时联系重要客户
5
数据管理
导入导出数据,数据备份与恢复
6
系统管理
包括代码管理、员工管理和账号管理
3、根据系统的初步需求,分析设计顶层数据流图
(1)、1层数据流图如下图所示:
(2)、2层数据流图如下图所示:
4、制定整理数据字典
(1)、分析数据流图,确定数据流的描述
在客户管理数据流图中,包含“客户资料”、“变更客户资料要求”、“删除客户资料要求”、“新增的客户信息”、“修改后的客户资料”等数据流。
◆数据流描述
数据流卡
编号:
F1
名称:
客户资料
来源:
客户信息
去向:
客户信息显示
数据结构:
客户编号、客户名称、客户等级、客户状态
说明:
某公司的全部客户资料
数据流卡
编号:
F2
名称:
变更客户资料要求
来源:
管理员输入
去向:
客户信息查询
数据结构:
客户编号、客户名称、客户等级、客户状态
说明:
某次要变动的客户资料要求
数据流卡
编号:
F3
名称:
删除客户资料要求
来源:
管理员输入
去向:
删除客户资料
数据结构:
客户资料
说明:
某次要删除的客户资料要求
数据流卡
编号:
F4
名称:
新增的客户信息
来源:
去向:
数据结构:
说明:
某次添加的新的客户信息
数据流卡
编号:
F7
名称:
修改后的客户资料
来源:
去向:
数据结构:
说明:
某次修改后的客户资料
(2)、分析数据流图,确定数据存储的描述
在客户管理数据流图中,包含“客户资料”等数据存储,描述其数据存储。
1数据存储:
客户资料
说明:
保存各个客户的资料信息
流入数据流:
新增的客户资料、修改后的客户资料
流出数据流:
客户资料显示
组成:
客户编号、客户姓名、客户等级
存取方式:
随机存取
(3)、分析数据流图,确定数据项的描述
◆数据项的定义:
数据项编号:
I01-01
数据项名称:
客户编号
别名:
客户编码
简述:
客户的顺序代号
类型:
数字
数据项编号:
I01-02
数据项名称:
客户姓名
别名:
客户名称
简述:
客户的称呼
类型:
文本
数据项编号:
I01-03
数据项名称:
所属行业
别名:
简述:
客户的行业
类型:
文本
数据项编号:
I01-04
数据项名称:
所在地区
别名:
简述:
客户的居住地
类型:
文本
数据项编号:
I01-05
数据项名称:
电话号码
别名:
简述:
客户的电话号码
类型:
数字
数据项编号:
I01-09
数据项名称:
客户等级
别名:
简述:
客户的重要性
类型:
文本
(4)、分析数据流图,确定处理过程的描述
在客户管理数据流图中,包含“客户信息查询”、“增加客户信息”、“修改客户信息”、“删除客户信息”、等处理过程,描述它们的处理流程。
1处理过程:
增加客户信息查询
说明:
录入一个客户的资料信息
输入:
客户编号、姓名
输出:
客户基本信息
处理:
在“客户信息”数据存储中增加一个客户的基本信息
2处理过程:
修改客户信息
说明:
录入一个客户的基本信息
输入:
客户编号、姓名
输出:
客户基本信息
处理:
在“客户基本信息”数据存储中修改一个客户的考试成绩
③处理过程:
客户信息查询
说明:
输入要查询的客户信息条件
输入:
管理人员
输出:
客户信息显示
处理:
输出某个客户的信息
④处理过程:
删除客户信息
说明:
删除某个客户的信息
输入:
客户编号、姓名
输出:
处理:
在“客户信息”数据存储中少了一个客户的信息
二、客户信息管理概念结构设计
①在客户资料管理中抽象实体,实体的码用下划线标出
★客户实体的属性为:
{客户编号、姓名、所属行业、电话、法人、经营范围、所在地区、客户等级、客户状态、传真}
★管理员实体的属性为:
{管理员编号、管理员姓名、密码}
★员工实体的属性为:
{员工编号、部门编号、员工名称、密码}
★部门实体的属性为:
{部门编号、部门名称}
★客服信息实体的属性为:
{服务编号、客户名称、联系人、受理方式、处理状态、处理部门编号、服务内容、处理日期、客户满意程度、客户反馈信息}
★市场活动信息实体的属性为:
{活动编号、活动主题、负责员工编号、客户编号、部门编号、联系时间、活动时间、活动类型、活动方式、活动内容}
(3)、确定实体间的关系,设计E-R图
为了简化设计,使用以下约束:
★一个管理员只管理一个部门,一个管理员可以管理多个多个员工
★一个客户只受一个员工服务,一个员工可以服务多个客户
★一个员工只能属于一个部门,一个部门可以有多个员工
①在客户管理局部应用
根据客户管理中的客户管理的局部应用,确定各实体间的联系
★一个客户必须被一个员工服务,而一个员工可以为多个客户服务,因此客户与员工的所在联系为n:
1联系;
★一个员工必须隶属于一个部门,一个部门包含多个员工,因此部门与员工的隶属联系是1:
n联系;
★根据约定一个部门只有一个管理人员,一个管理人员只担任一个部门的经理,因此部门与经理的管理联系时1:
1联系
(4)、合并分E-R图,解决冲突,消除冗余,设计基本E-R图,如下图所示:
(三)逻辑设计和物理设计
(6)、使用PowerDesigner设计CDM
由CDM生成PDM:
(四)数据库实施
各个表如下图所示:
◆员工表:
altertablecsinfo
dropconstraintFK_CSINFO_DISPOSE_WORKER
go
altertablemarketactive
dropconstraintFK_MARKETAC_WORK_WORKER
go
altertableserver
dropconstraintFK_SERVER_SERVER_WORKER
go
altertableworker
dropconstraintFK_WORKER_MANAGE_MANAGER
go
altertableworker
dropconstraintFK_WORKER_SUBJIECTI_DEPARMEN
go
ifexists(select1
fromsysindexes
whereid=object_id('worker')
andname='manage_FK'
andindid>0
andindid<255)
dropindexworker.manage_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('worker')
andname='subjiection_FK'
andindid>0
andindid<255)
dropindexworker.subjiection_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('worker')
andtype='U')
droptableworker
go
/*==============================================================*/
/*Table:
worker*/
/*==============================================================*/
createtableworker(
workeridbigintnotnull,
manageridintnull,
deparmentidintnull,
wnamevarchar(30)notnull,
workerpwvarchar(50)notnull,
constraintPK_WORKERprimarykeynonclustered(workerid)
)
go
/*==============================================================*/
/*Index:
manage_FK*/
/*==============================================================*/
createindexmanage_FKonworker(
manageridASC
)
go
/*==============================================================*/
/*Index:
subjiection_FK*/
/*==============================================================*/
createindexsubjiection_FKonworker(
deparmentidASC
)
go
altertableworker
addconstraintFK_WORKER_MANAGE_MANAGERforeignkey(managerid)
referencesmanager(managerid)
go
altertableworker
addconstraintFK_WORKER_SUBJIECTI_DEPARMENforeignkey(deparmentid)
referencesdeparment(deparmentid)
go
◆客户表:
altertablecsinfo
dropconstraintFK_CSINFO_TAKE_COMPANY
go
altertableserver
dropconstraintFK_SERVER_SERVER2_COMPANY
go
altertabletakepartin
dropconstraintFK_TAKEPART_TAKEPARTI_COMPANY
go
ifexists(select1
fromsysobjects
whereid=object_id('company')
andtype='U')
droptablecompany
go
/*==============================================================*/
/*Table:
company*/
/*==============================================================*/
createtablecompany(
companyidintnotnull,
companynamevarchar(50)notnull,
vocationvarchar(50)null,
addressvarchar(50)null,
companytelvarchar(50)null,
companyleadervarchar(50)null,
levelchar(8)null,
companystatevarchar(30)null,
constraintPK_COMPANYprimarykeynonclustered(companyid)
)
Go
◆服务表:
altertableserver
dropconstraintFK_SERVER_SERVER_WORKER
go
altertableserver
dropconstraintFK_SERVER_SERVER2_COMPANY
go
ifexists(select1
fromsysindexes
whereid=object_id('server')
andname='server2_FK'
andindid>0
andindid<255)
dropindexserver.server2_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('server')
andname='server_FK'
andindid>0
andindid<255)
dropindexserver.server_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('server')
andtype='U')
droptableserver
go
/*==============================================================*/
/*Table:
server*/
/*==============================================================*/
createtableserver(
workeridbigintnotnull,
companyidintnotnull,
serverpingjiavarchar(50)notnull,
constraintPK_SERVERprimarykey(workerid,companyid)
)
go
/*==============================================================*/
/*Index:
server_FK*/
/*==============================================================*/
createindexserver_FKonserver(
workeridASC
)
go
/*==============================================================*/
/*Index:
server2_FK*/
/*==============================================================*/
createindexserver2_FKonserver(
companyidASC
)
go
altertableserver
addconstraintFK_SERVER_SERVER_WORKERforeignkey(workerid)
referencesworker(workerid)
go
altertableserver
addconstraintFK_SERVER_SERVER2_COMPANYforeignkey(companyid)
referencescompany(companyid)
go
◆参与表:
altertabletakepartin
dropconstraintFK_TAKEPART_TAKEPARTI_MARKETAC
go
altertabletakepartin
dropconstraintFK_TAKEPART_TAKEPARTI_COMPANY
go
ifexists(select1
fromsysindexes
whereid=object_id('takepartin')
andname='takepartin2_FK'
andindid>0
andindid<255)
dropindextakepartin.takepartin2_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('takepartin')
andname='takepartin_FK'
andindid>0
andindid<255)
dropindextakepartin.takepartin_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('takepartin')
andtype='U')
droptabletakepartin
go
/*==============================================================*/
/*Table:
takepartin*/
/*==============================================================*/
createtabletakepartin(
activenobigintnotnull,
companyidintnotnull,
constraintPK_TAKEPARTINprimarykey(activeno,companyid)
)
go
/*==============================================================*/
/*Index:
takepartin_FK*/
/*==============================================================*/
createindextakepartin_FKontakepartin(
activenoASC
)
go
/*==============================================================*/
/*Index:
takepartin2_FK*/
/*==============================================================*/
createindextakepartin2_FKontakepartin(
companyidASC
)
go
altertabletakepartin
addconstraintFK_TAKEPART_TAKEPARTI_MARKETACforeignkey(activeno)
referencesmarketactive(activeno)
go
altertabletakepartin
addconstraintFK_TAKEPART_TAKEPARTI_COMPANYforeignkey(companyid)
referencescompany(companyid)
go
◆市场活动表:
altertablemarketactive
dropconstraintFK_MARKETAC_ADMINISTR_MANAGER
go
altertablemarketactive
dropconstraintFK_MARKETAC_WORK_WORKER
go
altertabletakepartin
dropconstraintFK_TAKEPART_TAKEPARTI_MARKETAC
go
ifexists(select1
fromsysindexes
whereid=object_id('marketactive')
andname='administrator_FK'
andindid>0
andindid<255)
dropindexmarketactive.administrator_FK
go
ifexists(select1
fromsysindexes
whereid=object_id('marketactive')
andname='work_FK'
andindid>0
andindid<255)
dropindexmarketactive.work_FK
go
ifexists(select1
fromsysobjects
whereid=object_id('marketactive')
andtype='U')
droptablemarketactive
go
/*==============================================================*/
/*Table:
marketactive*/
/*==============================================================*/
createtablemarketactive(
activenobigintnotnull,
manageridintnull,
workeridbigintnull,
activetimedatetimenotnull,
activecontentvarchar(100)null,
constraintPK_MARKETACTIVEprimarykeynonclustered(activen