MYSQL设计和开发规范(简易版)

MYSQL设计和开发规范

  • 1. 整体描述
  • 2. 数据库设计规范
    • 2.1 表名命名规则
    • 2.2 是否字段
    • 2.3 字母与数字
    • 2.4 禁止使用保留字
    • 2.5 可变字符串规范
    • 2.6 字段设计
  • 3. 数据库索引规范
    • 3.1 命名规则
    • 3.2 唯一索引规范
    • 3.3 join规范
    • 3.4 varchar规范
    • 3.5 模糊搜索规范
  • 4. 数据库SQL语句规范
    • 4.1 语句复杂度
    • 4.2 count规范
    • 4.3 null规范
    • 4.4 别名规范
    • 4.5 外键规范
    • 4.6 存储过程规范
    • 4.7 视图规范

1. 整体描述

多人团队开发时,难免会出现每个人的编码和开发习惯不一样,导致整个项目的编码风格多种多样,不利于项目后期开发和维护,所以设计和编码规范就起到了约束的作用,达到虽然多人编码,但是看着像一个人开发的一样。
不过,编码规范也有利有弊,弄得过于繁琐,也不利于开发人员实现,所以,适当指定编码规范是很重要和必要的。
本文对MYSQL的设计和使用加以规范,参考了阿里的规范说明,并进行的简单修改。

2. 数据库设计规范

2.1 表名命名规则

  1. 表名表示实体内容,不是实体数量,禁止使用复数;
  2. 表名以业务的包名开头,每个单词用_隔开。

2.2 是否字段

  1. 表达是否概念的字段,必须使用is_xxx的形式命名;
  2. 数据类型定义为 char(1);
  3. 1表示是,0表示否。

2.3 字母与数字

  1. 表名,字段名禁止出现大写;
  2. 禁止数字开头,禁止两个下划线中间只有数字。

2.4 禁止使用保留字

  1. 常见的例如:desc,range,match,delayed…

2.5 可变字符串规范

  1. 如果字符串长度较长,且内容长度差异较大,使用varchar;
  2. 如果字符串长度大部分超过5000,使用text,独立出一张表单独存储。

2.6 字段设计

  1. 必须具备id字段,类型为bigint,可以自增,也可以雪花ID,不具备业务含义;
  2. 必须具备status字段:类型为char(1),默认为0;
  3. 必须具备del_flag字段:类型为char(1) ,默认为0;
  4. 必须具备create_by字段,类型为varchar(64);
  5. 必须具备create_time字段:类型为datetime;
  6. 必须具备update_by字段,类型为varchar(64);
  7. 必须具备update_time字段:类型为datetime;
  8. 必须具备remark字段:类型为varchar(500);
  9. 执行insert操作时,将create_time和update_time都设置为当前时间,create_by和update_by都设置为当前操作人;
  10. 执行update操作时,update_time设置为当前时间,update_by设置为当前操作人。

3. 数据库索引规范

3.1 命名规则

  1. 正常索引,以:【idx_表名_字段名】进行命名,例如:在vpr_obj_part表的obj_id字段创建索引,索引名称应为:idx_vprobjpart_objid;
  2. 唯一索引,以:【unq_表名_字段名】进行命名,例如:在car_camera表的ip字段创建唯一索引,索引名称应为:unq_devcamera_ip。

3.2 唯一索引规范

  1. 理论上,业务上具备唯一特性的字段,应该创建唯一索引,例如:摄像头的ip。

3.3 join规范

  1. 禁止join数据量过多的表,一般业务数据表都是数据量比较多的;
  2. 需要join的字段,数据类型必须绝对一致;
  3. 被关联的字段要有索引。

3.4 varchar规范

  1. 没有必要对过长的varchar全字段建立索引;
  2. varchar字段上的索引必须指定索引长度。

3.5 模糊搜索规范

  1. 尽量不要使用左模糊或者全模糊查询。

4. 数据库SQL语句规范

4.1 语句复杂度

  1. SQL语句主要以增删改查,排序,计数等为主,不要在SQL语句里实现过于复杂的业务逻辑,业务逻辑用java代码实现。

4.2 count规范

  1. 不要使用count(column)或者count(1),请使用count(*);
  2. 如果要计算排除NULL值的不重复行计数,请使用count(distinct column)。

4.3 null规范

  1. 如果一列全是NULL,sum(column)返回的是NULL,因此在使用sum时,应用程序务必考虑NPE问题;
  2. 使用ISNULL(column)判断列是否为空,不要使用column is null 或者column is not null。

4.4 别名规范

  1. SQL中对于列的查询与修改,如果涉及多个表,必须使用表名(或者别名)对列进行限定。

4.5 外键规范

  1. 禁止使用外键。

4.6 存储过程规范

  1. 禁止使用存储过程。

4.7 视图规范

  1. 禁止使用视图。

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

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

相关文章

开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…

IPython魔法命令的深入应用

目录 IPython魔法命令的深入应用 一、魔法命令基础 1. 魔法命令的分类 2. 基本使用 二、高级应用技巧 1. 数据交互与处理 2. 交互式编程与调试 三、魔法命令的进阶操作 1. 自定义魔法命令 2. 利用魔法命令优化工作流程 四、总结与展望 IPython魔法命令的深入应用 IP…

vulnhub——Ai-Web1靶机渗透

Ai-Web1靶机渗透 靶机下载: 官网地址:https://www.vulnhub.com/entry/ai-web-1,353/ 攻击机:kali2024 一、信息收集 发下目标主机的IP为:192.168.201.141 用nmap工具扫描一下对方主机和服务 发现他打开了80端口 发现搜不到于是…

人是一个AI Agent吗?

人是一个AI Agent吗? 什么是AI Agent?人类的感知能力人类的推理与决策人类的执行能力人类的学习能力人类作为AI Agent的局限性结论 随着人工智能(AI)技术的不断发展,AI已经在许多领域展现出其强大的能力。AI Agent&…

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构,它是由 n(n>0)个有限节点组成的一个具有层次关系的集合,它的外观形似一颗倒挂着的树,根朝上,叶朝下,所以称呼为树。每颗子树的根节点有且只…

C#调用非托管dll的两种方式

C#调用非托管DLL的两种方式 在开发过程中,我们经常需要调用一些非托管的DLL库,比如用Delphi编写的DLL。本文将介绍两种在C#中调用非托管DLL的方法。 示例DLL 首先,我们有一个Delphi编写的DLL,它导出了一个名为MyFunction的方法…

TextView实现原理分析

TextView 是 Android 中用于显示文本的核心组件,它的实现原理涉及多个方面,包括文本渲染、布局计算、滚动支持等。下面,我将结合源码分析 TextView 的关键实现细节。 1. 构造和初始化 TextView 是 View 的子类,同时继承自 AppCo…

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以…

Android Studio关于Gradle及JDK问题解决

1.Android Studio 版本如:Android Studio Koala | 2024.1.1 2.Gradle 版本为:8.7 3.JDK 版本为:17 以上这三个必须匹配,具体可以看官网Android Studio 版本说明(https://developer.android.google.cn/studio?hlzh-…

autoware.universe源码略读(3.17)--perception:occupancy_grid_map_outlier_filter

autoware.universe源码略读3.17--perception:occupancy_grid_map_outlier_filter Overview(Class)RadiusSearch2dfilter(Class Constructor)RadiusSearch2dfilter::RadiusSearch2dfilter(mFunc)RadiusSearc…

2月科研——arcgis计算植被差异

ArcGIS中&#xff0c;设置高于或低于某个值的像元为 -9999&#xff0c;然后将这些地方设为空——目的&#xff1a;去除异常值和黑色背景值 Con(("T_std ano7.tif" > 2) | ("T_std ano7.tif" < - 2), - 9999,"T_std ano7.tif") SetNull(&…

python基础语法 007 文件操作-1读取写入

1 文件操作 1.1 什么时候用文件操作&#xff1f; 打开文档写东西看东西拿文档做统计 在python 文档操作作用 存储数据读取数据 打开文件有什么用&#xff1f; 读取数据&#xff0c;写入数据不管什么数据都可以用open打开&#xff0c;如可复制一张图片 1.2 open() 读取,…

c++中的冒泡排序(Bubble Sort),插入排序(Insertion Sort)和选择排序(Selection Sort)

前言 hello大家好啊&#xff0c;这里是文宇&#xff0c;不是文字&#xff0c;是文宇哦。今天开始爆更 冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它属于比较排序算法的一种。冒泡排序的基本…

Java开发利器:深入浅出`java.util.Objects`

在Java开发过程中&#xff0c;java.util.Objects作为一个不可或缺的工具类&#xff0c;为开发者提供了诸多实用方法&#xff0c;用以简化对象操作、提升代码健壮性和可读性。本文将详尽介绍Objects类中的几个核心方法及其应用场景&#xff0c;帮助你更好地驾驭Java编程。 前言…

C++顶层const和底层const

《Cprimer》中写到&#xff1a;顶层const表示指针本身是个常量&#xff0c;底层const表示指针所指的对象是一个常量。 顶层const可以表示任意的对象是常量&#xff0c;这一点对任何数据类型都适用。底层const则与指针和引用等复合类型的基本类型部分有关&#xff0c;比较特殊的…

【嵌入式DIY实例-ESP8266篇】-LCD ST7789显示BMP280传感器数据

LCD ST7789显示BMP280传感器数据 文章目录 LCD ST7789显示BMP280传感器数据1、硬件准备与接线2、代码实现在本文中,将介绍如何通过 ESP8266 NodeMCU 开发板 (ESP-12E) 与 ST7789 TFT 显示屏连接。 在此项目中,我们将了解如何将 ESP8266 NodeMCU 板与 Bosch Sensortec 的 BMP2…

OpenAI发布迷你AI模型GPT-4o mini

本心、输入输出、结果 文章目录 OpenAI发布迷你AI模型GPT-4o mini前言OpenAI发布迷你AI模型GPT-4o mini英伟达联合发布 Mistral-NeMo AI 模型:120 亿参数、上下文窗口 12.8 万个 tokenOpenAI发布迷你AI模型GPT-4o mini 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csd…

多视角多对学习方式的相关论文解读

目标解决问题&#xff1a; 1&#xff1b;地理分布的空气质量和天气站是异质的空间对象&#xff0c;它们监测的条件不同。现有的方法通常设计用于同质的空间对象&#xff0c;不适合联合预测。 2&#xff1b;观察误差累积&#xff1a;监测站的观测数据往往因传感器误差和环境干扰…

如何在 Nginx 中配置访问日志的格式?

文章目录 如何在 Nginx 中配置访问日志的格式&#xff1f;一、Nginx 访问日志的重要性二、Nginx 访问日志的默认格式三、自定义 Nginx 访问日志格式四、配置访问日志的存储路径五、实际应用场景与示例场景一&#xff1a;电商网站场景二&#xff1a;多语言网站场景三&#xff1a…

Win10+Docker配置TensorRT环境

1.Docker下载和安装 Docker下载:Install Docker Desktop on Windows Docker安装: 勾选直接下一步就行,安装完成后需要电脑重启。 重启后,选择Accept—>Continue without signing in—>skip survey. 可以进入下面页面,并且左下角是绿色的,显示e…