数据库建设命名规范

1、数据库库表命名规范

1.1 数据库命名规范

  • 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库
  • 全部小写命名,禁止出现大写
  • 禁止使用数据库关键字,如:name,time ,datetime,password等
  • 表名称不应该取得太长(一般不超过三个英文单词)
  • 表的名称一般使用名词或者动宾短语
  • 用单数形式表示名称,例如,使用 employee,而不是 employees
  • 表必须填写描述信息(使用SQL语句建表时)
  • 数据库创建  字符集:utf8mb4、排序规则:utf8mb4_general_ci

示例:档案管理 数据库 就是 bip_archives 表名 就 archives_xxx

1.2 命名规范

  • 模块_+功能点  示例:alllive_log   alllive_category
  • 功能点  示例:live   message
  • 通用表  示例:all_user

1.3 待优化命名示例

  • 冗余

错误示例:yy_alllive_video_recomment    yy_alllive_open_close_log

说明:去除项目名,简化表名长度,去”yy_”

  • 相同类别表命名存在差异,管理性差

错误示例:yy_all_live_category    yy_alllive_comment_user

说明:去除项目名,统一命名规则,均为”yy_alllive_”开头即可

  • 命名格式存在差异

错误示例:yy_showfriend    yy_user_getpoints    yy_live_program_get

说明:去除项目名,统一命名规则,动宾短语分离且动宾逻辑顺序统一

2、数据库字段命名规范

2.1 字段命名规范

  • 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔
  • 全部小写命名,禁止出现大写
  • 字段必须填写描述信息
  • 禁止使用数据库关键字,如:name,time ,datetime password 等
  • 字段名称一般采用名词或动宾短语
  • 采用字段的名称必须是易于理解,一般不超过三个英文单词
  • 在命名表的列时,不要重复表的名称。例如,在名employe的表中避免使用名为employee_lastname的字段
  • 不要在列的名称中包含数据类型
  • 字段命名使用完整名称,禁止缩写
  • 表中字段是另外一张表的主键,则为表名+id ,体现关联关系 示例:user_id

2.2 命名规范

  • 名词  示例:user_id    user_name    sex
  • 动宾短语  示例:is_friend   is_good

2.3 待优化命名示例

  • 大小写规则不统一

错误示例:user_id    houseID

说明:使用统一规则,修改为”user_id”,”house_id”

  • 加下划线规则不统一

错误示例:username    userid    isfriend    isgood

说明:使用下划线进行分类,提升可性,方便管理,修改为”user_name”,”user_id”,”is_friend”,”is_good”

  • 字段表示不明确

错误示例:uid    pid

说明:使用完整名称,提高可读性,修改为”user_id”,”person_id”

2.4 字段类型规范

  • 所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值,字符型的默认值为一个空字符值串’’,数值型的默认值为数值0,逻辑型的默认值为数值0
  • 系统中所有逻辑型中数值0表示为“假”,数值1表示为“真”,datetime、smalldatetime类型的字段没有默认值,必须为NULL
  • 用尽量少的存储空间来存储一个字段的数据

使用int就不要使用varchar、char,

用varchar(16)就不要使varchar(256)

IP地址使用int类型

固定长度的类型最好使用char,例如:邮编(postcode)

能使用tinyint就不要使用smallint,int

最好给每个字段一个默认值,最好不能为null

  • 用合适的字段类型节约空间

字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能)

避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)

少用text类型(尽量使用varchar代替text字段)

2.5 数据库中每个字段的规范描述

  • 尽量遵守第三范式的标准(3NF) 

     表内的每一个值只能被表达一次 

     表内的每一行都应当被唯一的标示 

     表内不应该存储依赖于其他键的非键信息

  • 如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建索引
  • 如果字段与其它表的字段相关联,需建索引
  • 如果字段需做模糊查询之外的条件查询,需建索引
  • 除了主关键字允许建立簇索引外,其它字段所建索引必须为非簇索引

3、表设计

  • 表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估。
  • ID字段作为自增主键。一般所有表都要有id, id必为主键,类型为bigint unsigned,单表时自增、步长为1。一般情况下主键id和业务没关系的。
  • 强烈建议不使用外键, 数据的完整性靠程序来保证。
  • 多表中的相同列,必须保证列定义一致。
  • 使用InnoDB,字符集:utf8mb4、排序规则:utf8mb4_general_ci。
  • 一般情况下每张表都有id、createBy、 createTime、 lastUpdateBy lastUpdateTime五个字段,追踪数据的来源和修改,并且只能逻辑删除,不能物理删除! 


 

  • 单表一到两年内数据量超过500w或数据容量超过10G考虑分表,且需要提前考虑历史数据迁移或应用自行删除历史数据。
  • 单条记录大小禁止超过8k, 一方面字段不要太多,有的都能上百,甚至几百个,另一方面字段的内容不易过大,像文章内容等这种超长内容的需要单独存到另一张表。
  • 日志类数据不建议存储在MySQL上,优先考虑Hbase或OB,如需要存储请找DBA评估使用压缩表存储。
  • 为了提高查询效率,可以适当的数据冗余,注意是适当。
  • 表被索引列必须定义为not null,并设置default值。
  • 禁止使用float、double类型,建议使用decimal或者int替代。
  • 禁止使用blob、text类型保留大文本、文件、图片,建议使用其他方式存储,MySQL只保存指针信息。
  • 禁止使用varchar类型作为主键。

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

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

相关文章

沃尔玛,eBay买家号成号率低如何解决?

eBay是一个很庞大的系统,买家号必须在本土环境才会安全。要想养出高权重的买家号,需要花大量的时间跟精力,一旦养出一批高质量且时间周期较长的买家号,就可以做很多事情,比如可以帮产品上排名,提高产品的权…

2020ICPC南京站

K K Co-prime Permutation 题意:给定n和k,让你构造n的排列,满足gcd(pi, i)1的个数为k。 思路:因为x和x-1互质,1和任何数互质,任何数和它本身不互质 当k为奇数时,p11,后面k-1个数…

python3.11教程2:基础数据类型(数字和字符串)、组合数据类型(集合、元组、列表、字典)

文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用 5.3 布尔类型5.4 字符串5.3.1 字符串的基本操作5.3.2 字符串函…

CAN总线学习——物理层、数据链路层、CANopen协议

1、CAN总线介绍 1.1、CAN总线描述 (1)CAN总线支持多节点通信,但是节点不分区主从,也就是不存在一个节点来负责维护总线的通信;这点可以和I2C总线对对比,I2C是一主多从模式; (2)是差分、异步、串行总线,采用…

Android安卓实战项目(13)---记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用!!!(源码在文末)

Android安卓实战项目(13)—记账APP详细记录每天的收入和支出并且分类统计【生活助手类APP】强烈推荐自己也在用!!!(源码在文末🐕🐕🐕) 一.项目运行介绍 B站…

说说HTTP 和 HTTPS 有什么区别?

分析&回答 http协议 超文本传输协议,是互联网上应用最多的协议,基于TCP/IP通讯协议来传递信息,用于从WWW服务器传输超文本到本地浏览器的传输协议。 https协议 我们可以将其看作是以安全为目标的http协议。在http协议的基础上增加了S…

C++——vector:resize与reserve的区别,验证写入4GB大数据时相比原生操作的效率提升

resize和reserve的区别 reserve:预留空间,但不实例化元素对象。所以在没有添加新的对象之前,不能引用容器内的元素。而要通过调用push_back或者insert。 resize:改变容器元素的数量,且会实例化对象(指定或…

十一、MySQL(DQL)聚合函数

1、聚合函数 注意:在使用聚合函数时,所有的NULL是不参与运算的。 2、实际操作: (1)初始化表格 (2)统计该列数据的个数 基础语法: select count(字段名) from 表名; ;统…

使用nlohmann json库进行序列化与反序列化

nlohmann源码仓库&#xff1a;https://github.com/nlohmann/json使用方式&#xff1a;将其nlohmann文件夹加入&#xff0c;包含其头文件json.hpp即可demo #include <iostream> #include "nlohmann/json.hpp" #include <vector>using json nlohmann::js…

【Axure高保真原型】多图表动态切换

今天和大家分享多图表动态切换的原型模板&#xff0c;点击不同的图标可以动态切换对应的表&#xff0c;包括柱状图、条形图、饼图、环形图、折线图、曲线图、面积图、阶梯图、雷达图&#xff1b;而且图表数据可以在左侧表格中动态维护&#xff0c;包括增加修改和删除&#xff0…

v-limit-input + 正则限制特殊字符

src/directives/limitInput.js 设置自定义指令 limitInput 的逻辑 export default {// bind钩子 当 v-XXX 指令绑定到节点上时 触发bind (el) {el.oninput () > {console.log(1, el)let pattern new RegExp("[~!#$^&*()|{}:;,\\[\\].<>/?~&#xff01;#&…

设置TOMCAT SESSIONID 字符长度和生成算法

修改TOMCAT 默认的生成SESSION ID的算法和字符长度非常简单,只需修改context.xml中的<Manager>标签值,比如&#xff1a; <Manager sessionIdLength"20" pathname"SESSIONS.ser" maxActiveSessions"8000" secureRandomAlgorith…

TiDB同城双中心监控组件高可用方案

作者&#xff1a; Prest13 原文来源&#xff1a; https://tidb.net/blog/44b9b8b1 背景 在双中心部署tidb dr-auto sync集群&#xff0c;出于监控的高可用考虑&#xff0c;在物理分离的两个数据中心分别部署独立的prometheusalertmanagergrafana&#xff0c;实现任一监控均…

基于单片机的点阵电子显示屏上下左右移加减速系统

一、系统方案 本设计的任务就是完成一个1616的点阵设计&#xff0c;并能滚动显示“********************”内容。 主要内容是&#xff0c;能同时流动显示汉字&#xff1b;能实现显示汉字无闪烁&#xff1b;能实屏幕亮度较高。本LED显示屏能够以动态扫描的方式显示一个1616点阵汉…

前端Vue仿企查查 天眼查知识产权标准信息列表组件

引入Vue仿企查查天眼查知识产权标准信息列表组件 随着技术的不断发展&#xff0c;传统的开发方式使得系统的复杂度越来越高。在传统开发过程中&#xff0c;一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题…

计网基础面试题

浏览器输入网址之后发生什么 1&#xff0c;DNS解析过程 2&#xff0c;三次握手 3&#xff0c;TLS通信 4&#xff0c;发送数据 5&#xff0c;四次挥手 TCP三次握手和四次挥手 两台计算机通信的过程 局域网通信———交换机——MAC地址 广域网通信———路由器——IP地址 网…

flutter plugins插件【二】【FlutterAssetsGenerator】

2、FlutterAssetsGenerator 介绍地址&#xff1a;https://juejin.cn/post/6898542896274735117 配置assets目录 ​ 插件会从pubspec.yaml文件下读取assets目录&#xff0c;因此要使用本插件&#xff0c;你需要在pubspec.yaml下配置资源目录 flutter:# The following line ens…

YOLOV8模型使用-检测-物体追踪

这个最新的物体检测模型&#xff0c;很厉害的样子&#xff0c;还有物体追踪的功能。 有官方的Python代码&#xff0c;直接上手试试就好&#xff0c;至于理论&#xff0c;有想研究在看论文了╮(╯_╰)╭ 简单介绍 YOLOv8 中可用的模型 YOLOv8 模型的每个类别中有五个模型用于检…

Bert和LSTM:情绪分类中的表现

一、说明 这篇文章的目的是评估和比较 2 种深度学习算法&#xff08;BERT 和 LSTM&#xff09;在情感分析中进行二元分类的性能。评估将侧重于两个关键指标&#xff1a;准确性&#xff08;衡量整体分类性能&#xff09;和训练时间&#xff08;评估每种算法的效率&#xff09;。…

Mac不想用iTerm2了怎么办

这东西真是让人又爱又恨&#xff0c;爱的是它的UI还真不错&#xff0c;恨的是它把我的环境给破坏啦&#xff01;让我每次启动终端之后都要重新source激活我的python环境&#xff0c;而且虚拟环境前面没有括号啦&#xff01;这怎么能忍&#xff01;在UI和实用性面前我断然选择实…