目录
前面内容请移步
资源+毕业设计+毕业论文+源代码请移步
第四章 数据库设计
数据库的存在意义就是存储数据,根据需求分析就是客户信息和产品信息,最明显的表现形式就是表结构的存在。然而设计数据库的初衷就是为应用程序提u供后台支持,把代码和系统能分离出来,良好的数据库设计有很多,可以降低数据之间的冗余性,提高数据库的可维护性,同时也能提高系统运行时的速度和系统的稳定性,实现数据之间的共享。可是根据系统的功能需求设计数据库并不是那么简单,需要反复的分析功能需求,逐步的研究和推敲出最为合理的数据库表,把表和表之间的潜在的关系通过E-R图表现出来。
4.1 系统和数据的关系
图4.1 数据库与系统的管理
4.2 数据库结构设计
下图就是数据库表的设计的E-R图,就是实体-联系图,通过E-R图,可以清楚的了解系统的表与表之间的结构关系,从概念上反应数据库信息组成情况。
图4.2 数据库E-R逻辑
4.2.1 业务实体设计
业务实体在应用程序是实体对象的表现形式存在,在后台数据库中存在的形式就是表和表之间的关系。那么业务实体的实现有下面的三个步骤:
- 设计域模型,创建域模型实体对象
- 设计关系型数据模型
- 创建对象、关系映射文件
4.2.2 设计域模型
生成一张客户关系记录需要上述的这些表。下面是详细的定义出这些数据库表字段的代表的意思:
- 部门表(hr_department):部门信息的记载。主要的属性有:部门主键(id),部门名称(d_name),上级分类ID(parentid),负责人(d_employee),电话(d_telephone),地址(d_address),邮箱(d_email),描述(d_description)。
- 职务表(hr_postion):对职务信息的记载。属性有:职务ID(ID),职务名称(postion_name),职务次序(postion_order)。
- 岗位表(hr_post):岗位信息的描述。属性有:岗位ID(ID),岗位名称(post_name),岗位描述(hr_descript)。
- 系统角色表(sys_role):记录的是角色的枚举值。属性有角色ID(ID),角色名称(rolename),权限说明(rolescript),当前权限可以操作(childmenus),权限排序(rolesort)。
- 员工表(hr_employee):员工信息的记录。属性有:员工ID(ID),用户名(uid),密码(pwd),姓名(name),身份证(idcard),生日(birthday),邮箱(email),性别(sex),电话(telephone),地址(address),备注(remarks)。
- 省市表:(param_city):作为省市参数的枚举表。属性有:省市ID(ID),上级ID(parentID),城市名称(city)。
- 客户表(crm_customer):客户信息(主要是集团客户)的记录。主要的属性有:客户表主键(ID),客户序列号(serialnumber),公司名称(customer),公司地址(address),公司电话(tel),公司网址(site),公司描述(descript),备注(remarks)。
- 产品类别表(crm_product_category):记录产品的分类,属性有客户类型主键(ID),父类型id(parentId)。
- 产品信息表(crm_product):记录的是产品信息。属性有产品id(product_id ),产品名称(product_name),产品规格(specifications),状态(status),单位(unit),备注(remarks),价格(price)。
上文和图4-2反应了各个表之间的关系。
4.3 数据库逻辑结构设计
部门类,职务类,客户类等这些对象都需要持久化,这些类在数据库上都有对应的表结构产生意义对应的是部门表,职务表,客户表等,设计出的数据库包含这些表。如下为各个表的建表语句以及表结构。
CREATE TABLE `hr_department` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '部门主键PK',
`d_name` varchar(50) DEFAULT NULL COMMENT '部门名称',
`parentid` int(8) DEFAULT NULL COMMENT '上级分类ID',
`d_employee` varchar(50) DEFAULT NULL COMMENT '负责人',
`d_telephone` varchar(50) DEFAULT NULL COMMENT '电话',
`d_address` varchar(255) DEFAULT NULL COMMENT '地址',
`d_email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`d_description` varchar(255) DEFAULT NULL COMMENT '描述',
`d_order` varchar(50) DEFAULT NULL COMMENT '部门次序',
`isdelete` int(1) DEFAULT '1' COMMENT '是否已删除0/1',
`delete_time` date DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`)
)
表 4-1 部门表结构
hr_department | 部门表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 联系人编号 | int | false | 主键 | |
D_name | 姓名 | Varchar(250) | true | null | |
parentid | 上级分类 | Varchar(250) | true | null | |
D_employee | 负责人 | Varchar(50) | true | null | |
D_telephone | 电话 | Varchar(50) | true | null | |
D_address | 地址 | Varchar(255) | true | null | |
D_email | 邮箱 | Varchar(50) | true | null | |
D_description | 描述 | Varchar(250) | true | null | |
D_order | 部门次序 | Varchar(50) | true | null |
CREATE TABLE `hr_position` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '职务ID PK',
`position_name` varchar(250) DEFAULT NULL COMMENT '名称',
`position_order` varchar(50) DEFAULT NULL COMMENT '次序',
PRIMARY KEY (`id`),
)
表 4-2 职务表结构
Hr_postion | 职务表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 职务编号 | int | false | 主键 | |
Postion_name | 职务名称 | Varchar(250) | true | null | |
Postion_order | 职务次序 | Varchr(50) | true | null |
CREATE TABLE `hr_post` (
`post_id` int(8) NOT NULL AUTO_INCREMENT COMMENT '岗位ID PK',
`post_name` varchar(255) DEFAULT NULL COMMENT '岗位名称',
`position_id` int(8) DEFAULT NULL COMMENT '职务ID FK',
`position_order` varchar(50) DEFAULT NULL COMMENT '职务次序号',
`dep_id` int(8) DEFAULT NULL COMMENT '岗位部门ID FK',
`post_descript` longtext COMMENT '岗位描述',
PRIMARY KEY (`post_id`),
KEY `position_id` (`position_id`),
KEY `dep_id` (`dep_id`),
CONSTRAINT `hr_post_ibfk_1` FOREIGN KEY (`position_id`) REFERENCES `hr_position` (`id`),
CONSTRAINT `hr_post_ibfk_2` FOREIGN KEY (`dep_id`) REFERENCES `hr_department` (`id`)
)
表 4-3 岗位表结构
hr_post | 岗位表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 岗位编号 | int | false | 主键 | |
Post_name | 名称 | Varchar(255) | true | null | |
Postion_id | 岗位职务 | int | true | null | 外键 |
Dep_id | 岗位部门 | int | true | null | 外键 |
Post_descript | 描述 | longText | true | null |
CREATE TABLE `sys_role` (
`roleid` int(8) NOT NULL AUTO_INCREMENT COMMENT '角色表PK',
`rolename` varchar(255) DEFAULT NULL COMMENT '角色名称',
`roledscript` varchar(255) DEFAULT NULL COMMENT '权限说明',
`childmenus` varchar(300) DEFAULT NULL COMMENT '当前权限下可以操作的子菜单',
`rolesort` char(10) DEFAULT NULL COMMENT '权限排序',
PRIMARY KEY (`roleid`)
)
表 4-4 角色表结构
Sys_role | 角色表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
roleid | 角色编号 | int | false | 主键 | |
rolename | 名称 | Varchar(255) | true | null | |
rolescript | 角色描述 | Varchar(255) | true | null | |
childmenus | 地址 | Varchar(300) | true | null | |
rolesort | 次序 | Char(8) | true | null |
CREATE TABLE `hr_employee` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '员工表ID 主键',
`uid` varchar(50) DEFAULT NULL COMMENT '用户名',
`pwd` varchar(50) DEFAULT NULL COMMENT '密码',
`name` varchar(50) DEFAULT NULL COMMENT '姓名',
`idcard` varchar(50) DEFAULT NULL COMMENT '身份证',
`birthday` date DEFAULT NULL COMMENT '生日',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`sex` varchar(50) DEFAULT NULL COMMENT '性别',
`telephone` varchar(50) DEFAULT NULL COMMENT '电话',
`status` varchar(50) DEFAULT NULL COMMENT '状态',
`sort` int(8) DEFAULT NULL COMMENT '排序 num',
`entrydate` date DEFAULT NULL COMMENT '入职日期',
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注',
`education` varchar(50) DEFAULT NULL COMMENT '学历',
`professional` varchar(50) DEFAULT NULL COMMENT '专业',
`schools` varchar(50) DEFAULT NULL COMMENT '毕业学校',
`role_id` int(8) DEFAULT NULL COMMENT '角色表 ID FK',
PRIMARY KEY (`id`),
KEY `post_id` (`post_id`),
KEY `role_id` (`role_id`),
CONSTRAINT `hr_employee_ibfk_2` FOREIGN KEY (`post_id`) REFERENCES `hr_post` (`post_id`),
CONSTRAINT `hr_employee_ibfk_5` FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`roleid`)
)
表 4-5 员工表结构
hr_rmployee | 员工表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 员工表id | int | false | 主键 | |
uid | 用户名 | Varchar(50) | true | null | |
pwd | 密码 | Varchar(50) | true | null | |
name | 姓名 | Varchar(50) | true | null | |
idcarde | 身份证 | Varchar(50) | true | null | |
birthday | 生日 | date | true | null | |
Post_id | 岗位id | Int | true | null | 外键 |
| 邮件 | Varchar(250) | true | null | |
Sex | 性别 | Varcahr(50) | True | null | |
telephone | 电话 | Varchar(50) | true | null | |
status | 状态 | Varchar | true | null | |
entrydate | 入职日期 | date | true | null | |
address | 地址 | Address(255) | true | null | |
remarks | 备注 | Varcahr(255) | true | null | |
education | 学历 | Varcahr(50) | true | null | |
roleid | 角色id | int | true | null | 外键 |
professioonal | 专业 | Varcahr(250) | true | null | |
schools | 毕业学校 | Varcahr(250) | true | null |
CREATE TABLE `param_city` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '省市ID PK',
`parentid` int(8) DEFAULT NULL COMMENT '上级ID',
`city` varchar(250) DEFAULT NULL COMMENT '省市名称',
PRIMARY KEY (`id`)
)
表 4-6 省市表结构
Param_city | 省市表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 省市编号 | int | false | 主键 | |
city | 城市名 | Varchar(250) | true | null | |
parentid | 上级分类 | int | true | null |
CREATE TABLE `crm_customer` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '客户表主键 PK',
`serialnumber` varchar(250) DEFAULT NULL COMMENT '客户序列号',
`customer` varchar(250) DEFAULT NULL COMMENT '公司名称',
`address` varchar(250) DEFAULT NULL COMMENT '公司地址',
`tel` varchar(250) DEFAULT NULL COMMENT '公司电话',
`site` varchar(250) DEFAULT NULL COMMENT '公司网止',
`provinces_id` int(8) DEFAULT NULL COMMENT '公司省份ID Fk',
`city_id` int(8) DEFAULT NULL COMMENT '公司城市ID FK',
`descripe` varchar(4000) DEFAULT NULL COMMENT '客户描述',
`remarks` varchar(4000) DEFAULT NULL COMMENT '备 注',
`create_id` int(8) DEFAULT NULL COMMENT '创建人id FK',
PRIMARY KEY (`id`),
KEY `ix_crm_customer_customer` (`customer`),
KEY `provinces_id` (`provinces_id`),
KEY `city_id` (`city_id`),
KEY `employee_id` (`employee_id`),
KEY `create_id` (`create_id`),
CONSTRAINT `crm_customer_ibfk_7` FOREIGN KEY (`employee_id`) REFERENCES `hr_employee` (`id`),
)
表 4-7 客户表结构
Crm_customer | 客户表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 客户表编号 | int | false | 主键 | |
serilnumber | 客户序号 | Varchar(250) | True | null | |
customer | 公司名称 | Varchar(250) | True | null | |
address | 地址 | Varchar(250) | True | null | |
tel | 电话 | Varchar(250) | True | null | |
site | 网址 | Varchar(250) | True | null | |
Provinces_id | 公司省份 | Varchar(250) | True | null | 外键 |
City_id | 公司城市 | Varchar(250) | True | null | 外键 |
descript | 描述 | Varchar(250) | True | null | |
remarks | 备注 | Varchar(250) | True | null | |
Employee_id | 负责员工 | Int(8) | True | null | 外键 |
CREATE TABLE `crm_product_category` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '产品类别ID pk',
`product_category` varchar(250) DEFAULT NULL COMMENT '产品分类名称',
`parentid` int(8) DEFAULT NULL COMMENT '父类别ID',
PRIMARY KEY (`id`)
)
表 4-8 产品类别表结构
Crm_product_catrgory | 产品类别表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 产品类别id | int | false | 主键 | |
Product_category | 类别名 | Varchar(250) | true | null | |
parentid | 上级分类 | int | true | null |
CREATE TABLE `crm_product` (
`product_id` int(8) NOT NULL AUTO_INCREMENT COMMENT '产品ID PK',
`category_id` int(8) DEFAULT NULL COMMENT '产品分类ID FK',
`product_name` varchar(100) DEFAULT NULL COMMENT '产品名称',
`specifications` varchar(250) DEFAULT NULL COMMENT '规格说明',
`status` varchar(250) DEFAULT NULL COMMENT '状态',
`unit` varchar(250) DEFAULT NULL COMMENT '单位',
`remarks` longtext COMMENT '备注解释',
`price` double DEFAULT NULL COMMENT '价格',
PRIMARY KEY (`product_id`),
KEY `category_id` (`category_id`),
CONSTRAINT `crm_product_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `crm_product_category` (`id`)
)
表 4-9 产品信息表结构
hr_product | 产品信息表 | ||||
字段名 | 字段描述 | 数据类型 | 空/非空 | 默认值 | 约束条件 |
id | 产品id | int | false | 主键 | |
Category_id | 类别id | int | true | null | 外键 |
Product_name | 名称 | Varchar(100) | true | null | |
specifications | 规格 | Varchar(250) | true | null | |
Status | 状态 | Varchar(250) | true | null | |
unit | 单位 | date | true | null | |
remarks | 备注 | longtext | true | null | |
price | 价格 | double | true | null |
4.4 本章小结
这一章介绍了根据业务需求设计数据库的相关表和表与表之间的关系以及给出了建表语句。