JSL_OrganizeInternalOA/doc/OrganizeInternalOA-SQL.md
2024-01-13 10:41:18 +08:00

15 KiB
Raw Blame History

OrganizeInternalOA 数据库设计

Author: 筱锋xiao_lfeng | Version: 1.1.0

数据库设计

本数据库设计基于原有 《数据库设计》 进行测试修改,进一步处理数据库结构与增加可维护性。

数据库所有字段均待定,后续可能会对某些字段进行删除,或者新增一些字段,尽量做成可维护的接口

所有的表之间,关联性尽量不要做的那么强,适当解耦,不然可维护性不高

另外,为保证数据库的完整性,对数据库适当位置加以外键约束,若后续需要进行维护删除表等操作,可删除外键约束后操作。

使用数据库系统 Mysql8

建表准备

总建表语句在 /mysql/organize_oa.sql 下存放。(重要:在执行导入中,请先看下面内容)

若需要导入数据库中,请先操作数据库进入对应数据库进行操作。无需执行表导入

USE organize_oa;

数据库、用户名和密码

为了保证业务后期可拓展性及充分利用 mysql 默认数据库中数据,请参考下面内容。

另外,由于各位开发者配置环境为本地环境,非测试环境。故数据库部署并非统一,避免在 application.yml 文件中对 spring.datasource 频繁修改操作git带来不必要的麻烦建议开发者建数据库时数据库名字为 organize_oa 。单独开设账号 organize_oa 密码 123456

-- 数据库及用户建表语句(执行后创建 organize_oa 数据库与同名 organize_oa 用户密码123456
CREATE USER 'organize_oa'@'%' IDENTIFIED WITH caching_sha2_password BY '123456';GRANT USAGE ON *.* TO 'organize_oa'@'%';ALTER USER 'organize_oa'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;CREATE DATABASE IF NOT EXISTS `organize_oa`;GRANT ALL PRIVILEGES ON `organize_oa`.* TO 'organize_oa'@'%';

application.yml 配置文件如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306
    username: organize_oa
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

注意url部分中没有使用 jdbc:mysql://localhost:3306/organize_oa ,在 mysql 中存在默认数据库 information_schema 该部分可以提取出该数据库(含 organize_oa 数据库)的信息,以及可以支持同账户下多张数据表,对后期若有需要可以调整使用。

url差别对于mapper的使用区别

在习惯使用 jdbc:mysql://localhost:3306/organize_oaMapper中数据库语法的描写较为简单。

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM oa_user WHERE username = #{username}")
    UserDO getUserByUsername(String username);
}

若修改为 jdbc:mysql://localhost:3306 之后,操作数据库都需要加上数据库名字,告知 DBMS 使用哪一个数据库后再选择数据表

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM organize_oa.oa_user WHERE username = #{username}")
    UserDO getUserByUsername(String username);
}

为何这样使用。

上述这样操作可以保证此服务对应一个数据库的用户,不使用 root 用户。使用 root 用户是一个很危险的事情,分出专门一个用户处理并且专门的用户中对应 information_schema 也有自己及名下相关的数据内容方便利用。除此之外,可以进行业务拓展。**若后期需要额外的开发要求,需要多个数据库,而不是单个数据库对应多个数据表的时候。**无需进行Mapper内繁琐代码修改替换只需在编写新的业务Mapper代码写入新的数据表名称即可。

// 举个例子
@Mapper
public interface GeneralMapper {
    @Select("SELECT * FROM organize_oa.oa_user WHERE username = #{username}")
    UserDO getUserByUsername(String username);
    
    @Select("SELECT * FROM organize_log.oa_logs WHERE id = #{id}")
    LogDO getLogById(Long id);
}

organize_oa 数据库设计

以下是关于此数据库目前结构样式图,其中箭头为外键约束。对于外键约束内容详细会在下面进行详细叙述。

classDiagram
direction BT
class node7 {
   varchar(50) value  /* 调用关键字 */
   json data  /* json数据 */
   timestamp created_at  /* 创建时间 */
   timestamp updated_at  /* 修改时间 */
   bigint unsigned id  /* 主键 */
}
class node0 {
   bigint unsigned pid  /* 权限父id */
   varchar(100) name  /* 权限名称 */
   varchar(50) code  /* 权限编码 */
   tinyint(1) type  /* 0为菜单1为权限 */
   deleted_at  /* 删除时间(没有删除应当为空) */ timestamp
   bigint unsigned id  /* 主键 */
}
class node5 {
   varchar(255) name  /* 项目名称 */
   varchar(255) description  /* 一句话描述 */
   text introduction  /* 项目详细介绍 */
   tinyint(1) code_open  /* 代码是否开放 */
   text core_code  /* 核心代码内容Markdown */
   json git  /* git代码仓库内容 */
   tinyint unsigned difficulty_level  /* 难度等级 */
   int unsigned type  /* 类型 */
   double reward  /* 报酬 */
   tinyint unsigned status  /* 状态 */
   bigint unsigned id  /* 项目id */
}
class node2 {
   varchar(50) name  /* 类型名字 */
   timestamp created_at  /* 创建时间 */
   timestamp updated_at  /* 修改时间 */
   int unsigned id  /* 项目类型id */
}
class node3 {
   varchar(20) role_name  /* 角色名称 */
   timestamp created_at  /* 创建时间 */
   timestamp updated_at  /* 修改时间 */
   int unsigned id  /* 角色id */
}
class node1 {
   bigint unsigned pid  /* 权限id */
   timestamp created_at  /* 创建时间 */
   int unsigned rid  /* 角色id */
}
class node6 {
   int unsigned rid  /* 角色id */
   timestamp createdt_at  /* 创建时间 */
   timestamp updated_at  /* 修改时间 */
   bigint unsigned uid  /* 用户id */
}
class node4 {
   char(10) job_id  /* 工作ID */
   varchar(40) username  /* 用户名 */
   varchar(255) password  /* 密码 */
   varchar(255) address  /* 用户家庭地址 */
   varchar(11) phone  /* 电话 */
   varchar(100) email  /* 邮箱 */
   tinyint unsigned age  /* 年龄 */
   varchar(50) signature  /* 一句话描述自己 */
   tinyint unsigned sex  /* 0/1/2:保密/男/女 */
   text avatar  /* 头像地址 */
   varchar(20) nickname  /* 昵称 */
   tinyint(1) enabled  /* 账户是否可用 */
   tinyint(1) account_no_expired  /* 账户是否过期 */
   tinyint(1) credentials_no_expired  /* 密码是否过期 */
   tinyint(1) recommend  /* 账户是否被推荐 */
   tinyint(1) account_no_locked  /* 账户是否被锁定 */
   text description  /* 个人简介 */
   timestamp created_at  /* 创建时间 */
   timestamp updated_at  /* 更新时间 */
   bigint unsigned id  /* 主键 */
}

node0  --|>  node0
node5  --|>  node2
node1  --|>  node0
node1  --|>  node3
node6  --|>  node3
node6  --|>  node4

oa_user 数据表

说明

【用户表】存放本项目所有用户数据

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 主键 bigint unsigned PRI NO auto_increment
2 job_id 工作ID正则表达 "^[STU|TEA|OTH][0-9]{7}" char(10) UNI NO
3 username 用户名 varchar(40) UNI NO
4 password 密码 varchar(255) NO
5 address 用户家庭地址 varchar(255) NO
6 phone 电话 varchar(11) UNI NO
7 email 邮箱 varchar(100) UNI NO
8 age 年龄 tinyint unsigned NO
9 signature 一句话描述自己 varchar(50) YES
10 sex 0/1/2:保密/男/女 tinyint unsigned NO 0
11 avatar 头像地址 text YES
12 nickname 昵称 varchar(20) YES
13 enabled 账户是否可用 tinyint(1) NO 1
14 account_no_expired 账户是否过期 tinyint(1) NO 1
15 credentials_no_expired 密码是否过期 tinyint(1) NO 0
16 recommend 账户是否被推荐 tinyint(1) NO 0
17 account_no_locked 账户是否被锁定 tinyint(1) NO
18 description 个人简介 text YES
19 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
20 updated_at 更新时间 timestamp YES

oa_role 数据表

说明

【角色表】包含所有的角色(目前主要为三个,学生、老师、管理员)

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 角色id int unsigned PRI NO auto_increment
2 role_name 角色名称 varchar(20) NO
3 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
4 updated_at 修改时间 timestamp YES

oa_permissions 数据表

说明

【权限表】所有的权限,具体到每一个功能

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 主键 bigint unsigned PRI NO auto_increment
2 pid 权限父id bigint unsigned MUL YES
3 name 权限名称 varchar(100) NO
4 code 权限编码 varchar(50) NO
5 type 0为菜单1为权限 tinyint(1) NO 1
6 deleted_at 删除时间(没有删除应当为空) timestamp YES

oa_role_user 数据表

说明

【用户角色分配表】为用户赋予默认权限属性的内容

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 uid 用户id bigint unsigned PRI NO
2 rid 角色id int unsigned MUL NO
3 createdt_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
4 updated_at 修改时间 timestamp YES

oa_role_permissions 数据表

说明

【角色权限表】为角色赋予指定权限操作

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 rid 角色id int unsigned PRI NO
2 pid 权限id bigint unsigned MUL NO
3 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP

oa_project 数据表

说明

【项目表】用于存放项目相关内容

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 项目id bigint unsigned PRI NO auto_increment
2 name 项目名称 varchar(255) NO
3 description 一句话描述 varchar(255) NO
4 introduction 项目详细介绍 text NO
5 code_open 代码是否开放 tinyint(1) NO 0
6 core_code 核心代码内容Markdown text YES
7 git git代码仓库内容 json YES
8 difficulty_level 难度等级 tinyint unsigned NO 1
9 type 类型 int unsigned MUL NO
10 reward 报酬 double YES
11 status 状态 tinyint unsigned NO 0

oa_project_type 数据表

说明

【项目类型表】用于存放项目种类的种类分类表

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 项目类型id int unsigned PRI NO auto_increment
2 name 类型名字 varchar(50) NO
3 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
4 updated_at 修改时间 timestamp YES

oa_project_cutting 数据表

说明

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 主键 bigint unsigned PRI NO auto_increment
2 pid 项目id bigint unsigned MUL NO
3 name 项目分割模块名字 varchar(40) NO
4 tag 模块标签 json YES
5 engineering 工程量计算 tinyint unsigned NO 1
6 estimated_time 预估时间(小时) int unsigned NO 3
7 real_time 实际时间 timestamp YES
8 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
9 updated_at 修改时间 timestamp YES

oa_project_user 数据表

说明

【用户项目分配表】用于存放用户所分配到的子项目内容

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 主键id bigint unsigned PRI NO auto_increment
2 uid 用户id bigint unsigned MUL NO
3 pid 接到分割项目内容 bigint unsigned MUL NO
4 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
5 updated_at 修改时间 timestamp YES

oa_config 数据表

说明

数据表字段属性

序号 名称 描述 类型 为空 额外 默认值
1 id 主键 bigint unsigned PRI NO auto_increment
2 value 调用关键字 varchar(50) UNI NO
3 data json数据 json YES
4 created_at 创建时间 timestamp NO DEFAULT_GENERATED CURRENT_TIMESTAMP
5 updated_at 修改时间 timestamp YES