微信小程序(四)——数据库设计篇

概述

这次的数据库采用了MYSQL,设计了6张表,其实还应该再细分多两三个表出来的,如果再改的话很多表和后台的代码也都要跟着改,都是多表联动,耦合性很强,比较麻烦,因为也能正常运作,索性就没再改了。接下来细说这6张表。

数据库表

数据库的话可以根据自己的习惯命名,我是直接命名为“test”,而对应的6张表分别命名为:
test_user,test_activity,test_handle,test_position,test_power,testdepartment。
需要注意的是这里表的前缀都是“ test ”,如果你命名为其他的话,都要保持一致的前缀,这个前缀会在后面的后台接口配置中使用。

具体如下:

  1. test_user:用户表,一对多,存放用户信息,包括其具有的权限,pid指的是position_id,代表的是用户的职位,其他的都有注释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DROP TABLE IF EXISTS `test_user`;
    CREATE TABLE `test_user` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(255) CHARACTER SET utf8 NOT NULL,
    `user_englishname` varchar(255) DEFAULT NULL,
    `user_openid` varchar(255) DEFAULT NULL COMMENT '微信的openid',
    `user_num` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '工号',
    `user_pid` int(11) NOT NULL COMMENT 'posision id,职位id',
    `user_powerid` int(11) NOT NULL COMMENT '权限id',
    `user_departmentid` int(11) NOT NULL COMMENT 'department部门id',
    `user_ischeck` int(11) NOT NULL DEFAULT '0' COMMENT '有无权限审核别人的活动',
    PRIMARY KEY (`user_id`),
    KEY `1` (`user_powerid`),
    KEY `2` (`user_pid`),
    KEY `3` (`user_departmentid`),
    KEY `user_name` (`user_name`),
    CONSTRAINT `1` FOREIGN KEY (`user_powerid`) REFERENCES `test_power` (`power_id`),
    CONSTRAINT `2` FOREIGN KEY (`user_pid`) REFERENCES `test_position` (`position_id`),
    CONSTRAINT `3` FOREIGN KEY (`user_departmentid`) REFERENCES `test_department` (`department_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
  2. test_activity:我把请假、出差申请都统称为(活动)acivity,用type来区分它们,time为活动的时长。申请通常都会有初审和终审,并且初审不能为空,终审可以为空。因为有些申请只需要一个人审核就可以了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for test_activity
    -- ----------------------------
    DROP TABLE IF EXISTS `test_activity`;
    CREATE TABLE `test_activity` (
    `activity_id` int(11) NOT NULL AUTO_INCREMENT,
    `activity_type` int(11) NOT NULL COMMENT 'type判断是请假还是出差。。。1或者2',
    `activity_openid` varchar(255) NOT NULL COMMENT 'userid用户id',
    `activity_st` datetime NOT NULL COMMENT '活动开始时间',
    `activity_et` datetime NOT NULL COMMENT '活动结束时间',
    `activity_createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `activity_address` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '出差地点',
    `activity_reson` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '活动事由',
    `activity_fristcheck_openid` varchar(255) NOT NULL COMMENT '审核人1的id(用户表)',
    `activity_secondcheck_openid` varchar(255) DEFAULT NULL COMMENT '审核人2 的id',
    `activity_fristcheck_result` int(11) NOT NULL DEFAULT '0' COMMENT '审核人1的审核结果,同意还是拒绝0或1',
    `activity_secondcheck_result` int(11) DEFAULT NULL COMMENT '审核人2的审核结果,同意还是拒绝1或是2',
    `activity_allresult` int(11) NOT NULL DEFAULT '1' COMMENT '活动是否完成,默认1为未完成,2为完成,3为拒绝该申请(无效)',
    `activity_time` float(11,0) NOT NULL,
    PRIMARY KEY (`activity_id`),
    KEY `activity_uid` (`activity_openid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=latin1;
  3. test_handle:处理表,为审核人查询是否有向自己申请的活动,有的话就要去处理。这里需要注意,每当审核人处理完成后都会删除对应的数据,意思是处理完之后再查询,是查询不到的,因为已经处理完成。而申请人要查看自己的申请完成情况可以查询test_activity表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for test_handle
    -- ----------------------------
    DROP TABLE IF EXISTS `test_handle`;
    CREATE TABLE `test_handle` (
    `handle_id` int(11) NOT NULL AUTO_INCREMENT,
    `handle_check_uid` varchar(255) NOT NULL COMMENT '审核人id',
    `handle_check_activityid` int(11) NOT NULL COMMENT '活动的id',
    `handle_one_or_two` int(11) NOT NULL COMMENT '是初审还是终审',
    PRIMARY KEY (`handle_id`),
    KEY `handle_check_uid` (`handle_check_uid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=latin1;
  4. test_position:职位表:代表着用户什么职位,这里可以参照我的测试数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for test_position
    -- ----------------------------
    DROP TABLE IF EXISTS `test_position`;
    CREATE TABLE `test_position` (
    `position_id` int(11) NOT NULL AUTO_INCREMENT,
    `position_name` varchar(255) CHARACTER SET utf8 NOT NULL,
    PRIMARY KEY (`position_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
    -- ----------------------------
    -- Records of test_position
    -- ----------------------------
    INSERT INTO `test_position` VALUES ('1', '办事员');
    INSERT INTO `test_position` VALUES ('2', '专员');
    INSERT INTO `test_position` VALUES ('3', '中专');
    INSERT INTO `test_position` VALUES ('4', '副经理');
    INSERT INTO `test_position` VALUES ('5', '经理');
    INSERT INTO `test_position` VALUES ('6', '总经理');
  5. test_power:权限表,,管理员有添加用户(新员工),删除用户(员工离职),修改员工权限的能力。这个不多做解释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for test_power
    -- ----------------------------
    DROP TABLE IF EXISTS `test_power`;
    CREATE TABLE `test_power` (
    `power_id` int(11) NOT NULL AUTO_INCREMENT,
    `power_name` varchar(255) NOT NULL COMMENT '权限名称',
    PRIMARY KEY (`power_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
    -- ----------------------------
    -- Records of test_power
    -- ----------------------------
    INSERT INTO `test_power` VALUES ('1', 'admin');
    INSERT INTO `test_power` VALUES ('2', 'user');
  6. test_department:部门

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SET FOREIGN_KEY_CHECKS=0;
    -- ----------------------------
    -- Table structure for test_department
    -- ----------------------------
    DROP TABLE IF EXISTS `test_department`;
    CREATE TABLE `test_department` (
    `department_id` int(11) NOT NULL AUTO_INCREMENT,
    `department_name` char(255) NOT NULL,
    PRIMARY KEY (`department_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    -- ----------------------------
    -- Records of test_department
    -- ----------------------------
    INSERT INTO `test_department` VALUES ('1', '人事组');
    INSERT INTO `test_department` VALUES ('2', '电商组');
    INSERT INTO `test_department` VALUES ('3', 'IT组');

SQL文件下载

参看微信小程序(九)——资源下载