优化 invite_codes 表的 SQL 创建语句

在这里插入图片描述

-- auto-generated definition
create table invite_codes
(id                 int auto_incrementprimary key,invite_code        varchar(6)                                                       not null comment '邀请码,6位整数,确保在有效期内唯一',invitor            int                                                              null comment '邀请人的ID,对应admin表中的id字段,表示生成该邀请码的管理员或用户',invite_level       tinyint                                                          null comment '邀请层级,对应admin表中level字段的值,表示邀请人的层级',generated_date     datetime                               default CURRENT_TIMESTAMP not null comment '生成时间,默认为当前时间',expire_time        datetime                                                         null comment '失效时间,可为空',remark             text                                                             null comment '备注信息,可为空',status             enum ('effective', 'expired', 'bound') default 'effective'       not null comment '邀请码状态,默认为 "effective"',bound_phone        varchar(20)                                                      null comment '绑定的手机号,对应admin表中的phone字段,表示与邀请码关联的管理员或用户的手机号',weixin_nickname    varchar(255)                                                     null comment '微信用户的昵称,对应user表中的nickname字段,表示与邀请码关联的用户的微信昵称',weixin_headimg     varchar(255)                                                     null comment '微信用户的头像URL,对应user表中的avatar字段,表示与邀请码关联的用户的微信头像URL',bound_wx_uid       varchar(255)                                                     null comment '微信用户的唯一标识符,对应user表中的weChatUnionId字段,表示与邀请码关联的用户的微信唯一标识符',admin_id           int                                                              null comment '管理员ID,关联admin表,可为空',user_id            int                                                              null comment '用户ID,关联user表,表示与邀请码关联的用户',is_locked          tinyint(1)                             default 0                 not null comment '是否锁定,0表示未锁定,1表示已锁定,默认为0',created_date       timestamp                              default CURRENT_TIMESTAMP not null comment '记录创建的时间戳,默认为当前时间',last_modified_date timestamp                                                        null on update CURRENT_TIMESTAMP comment '记录最后更新的时间戳,默认为NULL,更新时自动设置为当前时间',constraint codeunique (invite_code),constraint invite_codes_ibfk_1foreign key (admin_id) references productqualification.admin (id),constraint invite_codes_ibfk_2foreign key (invitor) references productqualification.admin (id),constraint invite_codes_ibfk_3foreign key (user_id) references productqualification.user (id)
)collate = utf8mb4_unicode_ci;create index admin_idon invite_codes (admin_id);create index invitoron invite_codes (invitor);create index user_idon invite_codes (user_id);

好的,我来根据你提供的图片和 SQL 创建语句,详细解释一下 SQL 审核的优化建议,并给出相应的修改方案。

图片内容解读:

图片中展示的是一份 SQL 审核的优化建议,主要分为两个部分:

  • 建议改进 (绿色标识):
    1. 字段建议增加备注说明:id
    2. invite_codes 表建议增加备注说明
  • 潜在问题 (黄色标识):
    1. invite_codes 表不建议使用外键
    2. status 字段的类型 enum 不建议使用,建议用 tinyint/char 代替
    3. id 是自增字段,建议增加无符号属性 (unsigned)
    4. invite_codes 表的校验集建议为: utf8_general_ci | utf8_bin | utf8mb4_general_ci | utf8mb4_bin

针对性优化方案:

根据以上建议和提供的 CREATE TABLE 语句,我给出优化后的 SQL:

CREATE TABLE `invite_codes` (`id` INT UNSIGNED AUTO_INCREMENT COMMENT '主键ID,自增长',`invite_code` VARCHAR(6) NOT NULL COMMENT '邀请码,6位整数,确保在有效期内唯一',`invitor` INT NULL COMMENT '邀请人的ID,对应admin表中的id字段,表示生成该邀请码的管理员或用户',`invite_level` TINYINT NULL COMMENT '邀请层级,对应admin表中level字段的值,表示邀请人的层级',`generated_date` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '生成时间,默认为当前时间',`expire_time` DATETIME NULL COMMENT '失效时间,可为空',`remark` TEXT NULL COMMENT '备注信息,可为空',`status` TINYINT NOT NULL DEFAULT 0 COMMENT '邀请码状态,0表示有效,1表示已过期,2表示已绑定',`bound_phone` VARCHAR(20) NULL COMMENT '绑定的手机号,对应admin表中的phone字段,表示与邀请码关联的管理员或用户的手机号',`weixin_nickname` VARCHAR(255) NULL COMMENT '微信用户的昵称,对应user表中的nickname字段,表示与邀请码关联的用户的微信昵称',`weixin_headimg` VARCHAR(255) NULL COMMENT '微信用户的头像URL,对应user表中的avatar字段,表示与邀请码关联的用户的微信头像URL',`bound_wx_uid` VARCHAR(255) NULL COMMENT '微信用户的唯一标识符,对应user表中的weChatUnionId字段,表示与邀请码关联的用户的微信唯一标识符',`admin_id` INT NULL COMMENT '管理员ID,关联admin表,可为空',`user_id` INT NULL COMMENT '用户ID,关联user表,表示与邀请码关联的用户',`is_locked` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否锁定,0表示未锁定,1表示已锁定,默认为0',`created_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建的时间戳,默认为当前时间',`last_modified_date` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '记录最后更新的时间戳,默认为NULL,更新时自动设置为当前时间',PRIMARY KEY (`id`),UNIQUE KEY `code` (`invite_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请码表';CREATE INDEX `admin_id` ON `invite_codes` (`admin_id`);
CREATE INDEX `invitor` ON `invite_codes` (`invitor`);
CREATE INDEX `user_id` ON `invite_codes` (`user_id`);

详细修改说明:

  1. id 字段添加备注:
    • id 字段的定义中添加 COMMENT '主键ID,自增长',以解释该字段的作用。
  2. invite_codes 表添加备注:
    • CREATE TABLE 语句的末尾添加 COMMENT='邀请码表',说明此表的作用。
  3. id 字段添加 UNSIGNED 属性:
    • INT 修改为 INT UNSIGNED,表示 id 列的值为非负整数。 这可以增加 id 列的最大值,因为无符号整数比有符号整数的范围更大。
  4. 移除外键约束(invite_codes_ibfk_1, invite_codes_ibfk_2, invite_codes_ibfk_3):
    • 根据建议,取消外键约束。 虽然外键可以保证数据一致性, 但是如果数据量过大, 外键约束会降低性能。 如果你的应用本身可以保证数据一致性,可以去掉外键约束。
    • 如果你的应用确实需要外键约束,并且性能不会是瓶颈,那么可以保留外键约束。
  5. status 字段类型修改为 TINYINT:
    • status 字段的类型从 enum ('effective', 'expired', 'bound') 修改为 TINYINT NOT NULL DEFAULT 0, 并添加注释 COMMENT '邀请码状态,0表示有效,1表示已过期,2表示已绑定'
    • enum 类型在数据库中存储的是字符串,而 tinyint 存储的是整数。 使用 tinyint 存储状态,性能更高。
    • 使用 tinyint 类型时,需要在注释中明确每个数字的含义。
  6. 设置表的字符集和排序规则:
    • CREATE TABLE 语句中使用 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
    • utf8mb4 字符集支持更广泛的 Unicode 字符,可以避免乱码问题。
    • utf8mb4_unicode_ci 是一种不区分大小写的排序规则, 在比较字符串时忽略大小写。
    • 这里选择 utf8mb4_unicode_ci 排序规则,因为该表中有昵称等数据, 选择此排序规则, 比较字符串时可以忽略大小写。
    • 如果你需要更精细的排序, 可以选择 utf8mb4_bin
    • 你也可以使用 utf8_general_ciutf8_bin, 但考虑到 utf8mb4 对 Unicode 的支持更好, 推荐使用 utf8mb4 的字符集和排序规则。
  7. 添加索引:
  • 保留原有的 admin_id, invitor, user_id 的索引。

其他说明:

  • 注释 (COMMENT): 在代码中添加合适的注释很重要,可以提高代码的可读性,方便后期维护。
  • 外键约束: 外键约束通常用于保证数据完整性,但是会降低性能, 你需要根据实际情况选择是否使用。
  • 数据类型选择: 选择合适的数据类型可以有效地利用存储空间, 并提高查询效率。
  • COLLATECHARSET 正确设置字符集和排序规则可以避免乱码问题,并且影响查询时的排序和比较规则。

总结:

优化后的 SQL 语句,根据了图片上的建议,添加了注释, 修改了 id 列的属性, 移除了外键约束,修改了 status 列的类型, 并设置了表的字符集和排序规则。 从而使 SQL 语句更清晰,结构更合理,也更能提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FATE-LLM简介;FATE-LLM集成了多种参数高效微调方法

FATE-LLM简介 FATE-LLM是一个支持联邦大语言模型训练的框架,其架构及核心技术原理如下: 架构概述 FATE-LLM主要由模型层、参数高效微调层、隐私保护与安全机制、通信与聚合模块等组成,致力于在保护数据隐私的前提下,利用联邦学习技术整合各方数据与算力资源,提升大语言模…

小程序租赁系统构建指南与市场机会分析

内容概要 在当今竞争激烈的市场环境中,小程序租赁系统正崭露头角,成为企业转型与创新的重要工具。通过这个系统,商户能够快速推出自己的小程序,无需从头开发,节省了大量时间和资金。让我们来看看这个系统的核心功能吧…

数据库系列之分布式数据库下误删表怎么恢复?

数据的完整性是数据库可用性的基本功能,在实际应用数据库变更操作过程中可能因为误操作导致误删表或者truncate操作影响业务的正常访问。本文介绍了分布式数据库中在误删表场景下的数据恢复方案,并进行了对比。 1、数据库误删表恢复方案 应用数据的完整…

论文阅读:Towards Faster Deep Graph Clustering via Efficient Graph Auto-Encoder

论文地址:Towards Faster Deep Graph Clustering via Efficient Graph Auto-Encoder | ACM Transactions on Knowledge Discovery from Data 代码地址: https://github.com/Marigoldwu/FastDGC 摘要 深度图聚类(Deep Graph Clustering, DGC…

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例

本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等!【…

BMS存储模块的设计

目的 电池管理系统中存在着数据本地存储的要求,保证控制器重新上电后能够根据存储器中的一些参数恢复控制状态,和信息的下电存储1.继电器故障信息的存储。2. 系统性故障的存储。3.SOC、SOH相关信息的存储。4.均衡参数的存储。5.系统时间信息。6.出厂信息…

Python爬取城市天气信息,并存储到csv文件中

1.爬取的网址为:天气网 (weather.com.cn) 2.需要建立Weather.txt文件,并在里面加入如下形式的字段: 101120701济宁 101010100北京 3.代码运行后,在命令行输入Weather.txt文件中添加过的城市,如:济宁。 …

MySQL线上事故:使用`WHERE`条件`!=xxx`无法查询到NULL数据

前言 在一次 MySQL 的线上查询操作中,因为 ! 的特性导致未能正确查询到为 NULL 的数据,险些引发严重后果。本文将详细解析 NULL 在 SQL 中的行为,如何避免类似问题,并提供实际操作建议。 1. 为什么NULL会查询不到? 在…

JVM和异常

Java 虚拟机(Java Virtual Machine,简称 JVM) 概述 JVM 是运行 Java 字节码的虚拟计算机,它是 Java 程序能够实现 “一次编写,到处运行(Write Once, Run Anywhere)” 特性的关键所在。Java 程序…

Mybatis 为什么不需要给Mapper接口写实现类,为什么要使用代理而不是硬编码?

文章目录 核心机制概述源码分析1. 获取 Mapper 实例2. 创建 Mapper 代理对象3. 拦截方法调用 MapperProxy4. 关联 SQL 并执行 为什么 MyBatis 采用了代理机制,而不是简单地面向流程化的方式?1. 解耦和灵活性2. 方法拦截和事务管理3. 动态代理支持方法级别的 SQL 定…

DevOps流程CICD之Jenkins使用操作

一、jenkins的docker-compose安装部署 请参考 jenkins的docker安装部署配置全网最详细教程-CSDN博客 二、创建repository 三、创建ssh 四、创建视图 五、创建任务 六、配置gitlab钩子 七、自动构建部署CI/CD验证

Solidworks打开无法获得许可,提示(-15,10,10061)错误解决办法

参考文章: https://blog.csdn.net/2301_81263647/article/details/140904773

四、AI知识(其他算法)

四、AI知识(其他算法) 1.其他算法 终身学习 元学习 2.建模预处理与评估 数据清洗 数据规约 空缺值 噪声数据 数据变换 数据规范化(如正则化、归一化) 数据压缩 数据规约 数值数据离散化/分类数据概念分层 模型评估 …

【云原生】Docker Compose 从入门到实战使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 安装 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版 3.2.2 设置权限 3.2.3 设置软链接 3.2.4 查看版本…

wangEditor/editor自定义粘贴后续

背景 按照上一篇文章处理自定义粘贴之后,发现复制表格之后,会出现表格样式失效问题,原因是自定义粘贴没有处理表格数据,导致按照文本格式粘贴了 处理方式 自定义表格(如果业务有需求需要更新表格样式的,…

【OTA】论文笔记--《智能网联汽车整车OTA功能设计研究》智能网联汽车OTA系统设计分析报告

智能网联汽车OTA系统设计分析报告 引言 随着汽车智能化、网联化水平不断提升,现代汽车中电子控制单元(ECU)的数量和复杂度持续增加。据统计,高级轿车上电子电气元件的成本已占整车开发成本的60%~70%。为了实现对这些电控单元的软件开发调试、数据标定、文件更新和故障修复,…

【电路理论四】正弦电流电路

正弦电流 正弦量是随时间按正弦规律变动的电路变量。 随时间按正弦规律变动的电流称为正弦电流。 正弦电流的瞬时值表达式: 称为正弦电流的三要素。 分别为振幅/幅值,角频率,初相。 幅值为正弦电流的最大值,恒为正。 为正弦电…

解决Windows无法同时使用有线网和无线网WIFI的问题

参考资料 电脑无线网wifi和有线网同时使用(内网外网同时使用)用route命令解决Wifi和网卡不能同时上内外网问题 解决方法 对于Windows系统同时连接有线网和无线网Wifi时,只会有一个网关生效,因此我们需要手动通过route命令设置网…

FOC控制原理-ADC采样时机

0、文章推荐 SimpleFOC移植STM32(五)—— 电流采样及其变换_极对数对电流采样的影响-CSDN博客 FOC 电流采样方案对比(单电阻/双电阻/三电阻) - 知乎 (zhihu.com) FOC中的三种电流采样方式,你真的会选择吗?…

uniapp:编译微信、h5都正常的,编译钉钉小程序无法找到页面

我们在做uniapp的开发的时候遇到很多莫名其妙的问题,其中就有个很奇葩的问题,我们开发的过程中使用微信小程序/h5调试都是正常编译正常跳转,然后在要上架的时候,编译钉钉小程序成功,但是访问页面无法访问, …