优化 invite_codes 表的 SQL 创建语句

在这里插入图片描述

-- auto-generated definition
create table invite_codes
(
    id                 int auto_increment
        primary 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 code
        unique (invite_code),
    constraint invite_codes_ibfk_1
        foreign key (admin_id) references productqualification.admin (id),
    constraint invite_codes_ibfk_2
        foreign key (invitor) references productqualification.admin (id),
    constraint invite_codes_ibfk_3
        foreign key (user_id) references productqualification.user (id)
)
    collate = utf8mb4_unicode_ci;

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);


好的,我来根据你提供的图片和 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 语句更清晰,结构更合理,也更能提高性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言基础:指针(数组指针与指针数组)

数组指针与指针数组 数组指针 概念:数组指针是指向数组的指针,本质上还是指针 特点: 先有数组,后有指针 它指向的是一个完整的数组 一维数组指针: 语法: 数据类型 (*指针变量名)[行容量][列容量]; 案…

进阶篇(1)

一.存储引擎: <1>MySQL体系结构: 1.连接层: 主要接收客户端的连接,完成一些连接的处理、认证授权、及相关操作安全方案、检测是否超过最大连接数等等;也会为安全接入的每个客户端验证它所具有的操作权限。 例如:在连接MySQL服务器时,我们需要输入用户名和密码,输…

电脑提示报错NetLoad.dll文件丢失或损坏?是什么原因?

一、NetLoad.dll文件丢失或损坏的根源 程序安装不完整&#xff1a;某些程序在安装过程中可能因为磁盘错误、网络中断或安装程序本身的缺陷&#xff0c;导致NetLoad.dll文件未能正确安装或复制。 恶意软件攻击&#xff1a;病毒、木马等恶意软件可能会篡改或删除系统文件&#x…

uniapp使用live-pusher实现模拟人脸识别效果

需求&#xff1a; 1、前端实现模拟用户人脸识别&#xff0c;识别成功后抓取视频流或认证的一张静态图给服务端。 2、服务端调用第三方活体认证接口&#xff0c;验证前端传递的人脸是否存在&#xff0c;把认证结果反馈给前端。 3、前端根据服务端返回的状态&#xff0c;显示在…

UE5仿漫威争锋灵蝶冲刺技能

这两天玩了一下漫威争锋Marvel Rivals&#xff0c;发现是UE5做的&#xff0c;对里面一些角色技能挺感兴趣的&#xff0c;想简单复刻一下技能功能&#xff0c;顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 &#xff0c;这样摄像机就…

去除 el-input 输入框的边框(element-ui@2.15.13)

dgqdgqdeMac-mini spid-admin % yarn list --pattern element-ui yarn list v1.22.22 └─ element-ui2.15.13 ✨ Done in 0.23s.dgqdgqdeMac-mini spid-admin % yarn list vue yarn list v1.22.22 warning Filtering by arguments is deprecated. Please use the pattern opt…

Suno Api V4模型无水印开发「综合实战开发自己的音乐网站」 —— 「Suno Api系列」第14篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…

企业如何搭建安全的跨网文件安全交换管理系统

在数字化转型的浪潮中&#xff0c;企业对数据的安全性和流动性提出了前所未有的高要求。特别是在网络隔离的情况下&#xff0c;如何实现跨网的安全、高效的文件交换成为了众多企业迫切需要解决的问题。 这不仅是技术上的挑战&#xff0c;还涉及到企业内部管理流程的优化和安全策…

Torch.gather

1.官方文档 2.使用要点 输入index的shape等于输出value的shape输入index的索引值仅替换该index中对应dim的index值最终输出为替换index后在原tensor中的值 最终输出的shape和index的shape相同 根据dim的值 选择将index[i,j,k]这个结果替换input[i,j,k]里面对应的i or j or…

报警推送消息升级的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

《解锁 Python 数据挖掘的奥秘》

《解锁 Python 数据挖掘的奥秘》 一、Python 数据挖掘基础&#xff08;一&#xff09;Python 基础与数据挖掘环境搭建&#xff08;二&#xff09;数据挖掘基本流程概述 二、Python 数据挖掘核心技术&#xff08;一&#xff09;数据收集与预处理技术&#xff08;二&#xff09;常…

如何通过 360 驱动大师检查自己电脑上的显卡信息

在深入探讨如何查看显卡信息之前&#xff0c;首先需要了解显卡的基本概念。显卡&#xff08;Graphics Processing Unit, GPU&#xff09;&#xff0c;是计算机中负责处理图形输出到显示器的重要硬件。根据其集成度和性能&#xff0c;显卡通常被分为两类&#xff1a; 集成显卡&…

深度学习目标检测算法之RetinaNet算法

文章目录 前言RetinaNet 算法原理1.RetinaNet 简介2.backbone 部分3.FPN特征金字塔4.分类和预测5.Focal Loss 结束语 &#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注…

[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构

link [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要0x01 启动 1.1 分布式启动1.2 构造基础 1.2.1 获取模型1.2.2 获取数据集1.2.3 步进函数 1.2.3.1 广播数据0x02 Pretrain0x03 初始化 3.1 …

点击标题滚动到指定模块

vue鼠标点击标题滚动到指定模块&#xff0c;如果滚动页面到指定模块的话标题同样改变颜色 <script> export default {name: ceshi,data() {return {activeSection: 0, // 默认激活第一个标题sections: [{ title: Section 1, content: Content for section 1 },{ title: S…

Kubernetes 镜像拉取策略全解析:如何根据需求选择最佳配置?

在Kubernetes集群里&#xff0c;拉取容器镜像是一个非常关键的步骤。这些镜像包含了应用程序及其所有需要的依赖项&#xff0c;Kubernetes通过拉取这些镜像来启动Pod中的容器。为了提升集群的稳定性、速度和安全性&#xff0c;Kubernetes提供了几种不同的镜像拉取策略。这篇文章…

【碳库】双碳目标下农田温室气体排放估算与模拟(从碳库模拟、机器学习方法、生命周期评价法(LCA)、经验模型和过程模型多个维度)

生态与农业是甲烷&#xff08;CH4&#xff09;、氧化亚氮&#xff08;N2O&#xff09;和二氧化碳&#xff08;CO2&#xff09;等温室气体的主要排放源&#xff0c;占全产业排放的13.5%。农田温室气体又以施肥产生的N2O和稻田生产产生的CH4为主&#xff0c;如何对农田温室气体进…

[计算机网络]OSPF协议

开放最短路径优先OSPF 1&#xff09;OSPF的工作方式 1>和谁交换消息 使用洪泛法&#xff0c;向本自治系统的所有路由器发送消息。 2>交换什么消息 发送的消息就是与本路由器相邻的所有路由器的链路状态&#xff0c;但这只是路由器所知道的部分信息。 链路状态就是说…

mysql进阶

存储引擎 MySQL体系结构&#xff1a; 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的&#xff0c;所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作&#xff1a; -- 查询建表语句 show create table ac…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题&#xff1a; 从今年开始&#xff0c;不知道咋回事&#xff0c;电脑上的Unity2017像是变了个人似得&#xff0c;突然特别爱闪退掉&#xff0c;有时候还次次闪退&#xff0c;真是让人无语&#xff0c;一直以来我都怀疑是不是电脑上安装了什么别的软件了&#xff0c;导致…