分类 SQLserver 下的文章

可以根据它自研引擎

CREATE TABLE `departments` (
  `dept_id` int(11) NOT NULL COMMENT '部门id',
  `dept_name` varchar(255) NOT NULL COMMENT '部门名',
  `leader` varchar(255) DEFAULT NULL COMMENT '部门主管',
  `parent_id` int(11) DEFAULT NULL COMMENT '父部门id',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`dept_id`),
  KEY `dept_id` (`dept_id`),
  KEY `parent_id` (`parent_id`),
  KEY `leader` (`leader`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `form_groups` (
  `group_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `group_name` varchar(255) NOT NULL COMMENT '组名',
  `sort_num` int(3) NOT NULL DEFAULT '0' COMMENT '排序号',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`group_id`),
  UNIQUE KEY `group_name` (`group_name`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4;

CREATE TABLE `process_instances` (
  `instance_id` varchar(40) NOT NULL COMMENT '审批实例ID',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `commit_user` varchar(50) DEFAULT NULL COMMENT '发起人ID',
  `forms` text COMMENT '表单内容',
  `status` varchar(10) DEFAULT NULL COMMENT '流程状态',
  `result` varchar(10) DEFAULT NULL COMMENT '流程结果',
  `instance_nodes` text COMMENT '流程审批链',
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  PRIMARY KEY (`instance_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `process_templates` (
  `template_id` varchar(50) NOT NULL DEFAULT '' COMMENT '审批摸板ID',
  `template_name` varchar(125) DEFAULT NULL COMMENT '摸板名称',
  `form_items` text COMMENT '摸板表单',
  `process` text COMMENT '流程数据',
  `icon` varchar(50) DEFAULT '' COMMENT '图标',
  `background` varchar(50) DEFAULT NULL COMMENT '图标背景色',
  `notify` varchar(255) DEFAULT NULL COMMENT '通知',
  `who_commit` varchar(1024) DEFAULT NULL COMMENT '谁能提交',
  `who_edit` varchar(1024) DEFAULT NULL COMMENT '谁能编辑',
  `who_export` varchar(1024) DEFAULT NULL COMMENT '谁能导出数据',
  `is_stop` bit(1) DEFAULT b'0' COMMENT '是否已停用',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`template_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `template_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `template_id` varchar(50) NOT NULL,
  `group_id` int(11) NOT NULL,
  `sort_num` int(11) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `template_id` (`template_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=167 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `users` (
  `user_id` int(11) NOT NULL COMMENT '用户id',
  `user_name` varchar(255) NOT NULL COMMENT '用户名',
  `pingyin` varchar(50) DEFAULT NULL COMMENT '拼音  全拼及首字母缩写',
  `alisa` varchar(255) DEFAULT NULL COMMENT '昵称',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  `sex` bit(1) DEFAULT b'1' COMMENT '性别',
  `department_ids` varchar(255) NOT NULL COMMENT '部门id,分隔',
  `entry_date` date DEFAULT NULL COMMENT '入职日期',
  `leave_date` date DEFAULT NULL COMMENT '离职日期',
  `admin` int(2) DEFAULT '2' COMMENT '管理级别 0=主管理员 1=子管理员 2=普通员工',
  `created` datetime DEFAULT NULL COMMENT '创建时间',
  `updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`user_id`),
  KEY `user_id` (`user_id`),
  KEY `department_ids` (`department_ids`),
  KEY `leave_date` (`leave_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

对应demo
前端:https://github.com/willianfu/workflow-client
后端:https://github.com/willianfu/workflow-server

  1. INT等整型不要采用无符号的,计算增加会减少时候如果是负数会报错。
  2. 自增用8个字节的BIG INT,而不要用四个字节INT,自增在MySQL 8.0前都会有回溯问题。
  3. 字符集用UTF8MB4字符编码。
  4. 日期类型用DATETIME,精确到毫秒用DATETIME(6),不建议使用INTTIMESTAMP
  5. JSON存储非频繁更新的结构化数据,比如用户标签等。
  6. 每张表一定要有一个主键,核心表要有全局唯一字段(比如雪花算法生成id或有序UUID)作为主键。
  7. 对日志,监控类的表,可以使用压缩设计,提升存储效率。推荐使用透明页压缩。
  8. 敏感字段要加密,动态盐+非固定加密算法( AES256等)+多轮加密。
  9. Mysql中通过KV方式访问表中数据,若只是简单的SETGET,可以转成MemcachedKV方式,减少开销,提升50%左右性

qx.JPG

  • 通过角色获取到用户 Roles-UserRoles-Users
  • 通过角色获取到导航菜单 Roles-NavigationRoles-Navigations
  • 通过角色获取到部门以及部门用户 Roles-RoleGroup-Groups-UserGroup-Users
  • 通过角色获取到授权应用 Roles-RoleApp

这个算是比较经典的了,需要的可能参考。

PKprimary key 主键
NNnot null 非空
UQunique 唯一索引
BINbinary 二进制数据(比text更大的二进制数据)
UNunsigned 无符号 整数(非负数)
ZFzero fill 填充0 例如字段内容是1 int(4), 则内容显示为0001
AIauto increment 自增
Ggenerated column 生成列

在mysql查询语句中加\g、\G的意思:

\g 的作用是分号和在sql语句中写“;”是等效的
\G 的作用是将查到的结构旋转90度变成纵向(换行打印)