操作规范

  1. 如无说明,建表时一律采用innodb引擎;
  2. 如无说明,数据库表编码集(utf8,utf8_bin)
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
  3. 如无备注,则表中的第一个id字段一定是主键且为自动增长;
  4. 如无备注,则数值类型的字段请使用UNSIGNED属性;
  5. 如无备注,排序字段order_id在程序中默认使用降序排列;
  6. 如无备注,所有字段都设置NOT NULL,并设置默认值;
  7. 如无备注,所有的布尔值字段,如is_hot、is_deleted,都必须设置一个默认值,并设为0;
  8. 所有的数字类型字段,都必须设置一个默认值,并设为0;
  9. 针对varchar类型字段的程序处理,请验证用户输入,不要超出其预设的长度;
  10. 建表时将数据字典中的字段中文名和属性备注写入数据表的备注中(“PK、自动增长”不用写);
  11. 数据库表结构修改操作都需要写出对应的修改表结构的sql语句,发给数据库管理人员。避免不同环境的数据库表结构不统一

库命名规范

线上环境、开发环境、测试环境数据库内网域名遵循命名规范

业务名称:xxx
线上环境:ali.×xx.db
预发布环境:ali.×xx.pdb
测试环境:ali.×xx.tdb
开发环境: ali.×xx.ddb
从库在名称后加-s标识,备库在名称后加-ss标识
线上从库:ali.xxx-s.db
线上备库:ali.xxx-ss.db
注: ali为公司名称缩写

表命名规范

规范

1.具备统一前缀,对相关功能的表应当使用相同前缀,如acl_xxx,house_xxx,ppc_xxx;其中前缀通常为这个表的模块或依赖主实体对象的名字,通常来讲表名为:业务_动作_类型,或是业务_类型;

2.表名使用英文小写单词,如果有多个单词则使用下划线隔开;

3.表名简介,使用常见单词,避免使用长单词和生僻词;

4.表引擎取决于实际应用场景及当前数据库中的已经存在的存储引擎;日志及报表类表建议用myisam,与交易,审核,金额相关的表建议用innodb引擎。总体来讲数据库默认innodb;

5.数据表必须有主键,且建议均使用auto_increment的id作为主键(与业务无关),和业务相关的要做为唯一索引;

6.默认使用utf8字符集(由于数据库定义使用了默认,数据表可以不再定义,但为保险起见,建议都写上);

7.所有的表都必须有备注,写明白这个表中存放的数据内容;

8.预估表数据量,如果数据量较大(超过500w)则需要考虑分表策略。可以等量均衡分表或根据业务规则分表均可。要分表的数据表必须与DBA商量分表策略;

9.职责相近的表,命名规则应该相同;如合同申请,账户信息,交友相关等;

约定

  1. 说明:表前缀用项目名称首字母缩写;所以表名都小写,单词之间用下划线分开,单词都用单数形式
  2. user – 用户
  3. category – 分类
  4. goods – 商品、产品等一切可交易网站的物品都用此命名
  5. good_gallery – 物品的相册
  6. good_cate – 物品的分类,除了单独作为表名,其他地方分类单词一律用缩写cate
  7. attr – 属性
  8. article – 文章、新闻、帮助中心等以文章形式出现的,一般都用此命名
  9. cart – 购物车
  10. feedback – 用户反馈
  11. order – 订单
  12. site_nav – 包括页头和页尾导航
  13. site_config – 系统配置表
  14. admin – 后台用户 【RBAC标准表】
  15. role – 后台用户角色【RBAC标准表】
  16. access – 后台操作权限,相当于action【RBAC标准表】
  17. role_admin – 后台用户对应的角色【RBAC标准表】
  18. access_role – 后台角色对应的权限【RBAC标准表】
  19. 待续

范例

一张在线冲值记录表:user_bank_deposit这个就非常符合标准,如果叫做userBankDeposit或是user_chongzhi,就非常不友好。

字段命名规范

规范

1.数据库字段命名与表名命名类似:

2.使用小写英文单词,如果有多个单词使用下划线隔开;

3.使用简单单词,避免生僻词;

4.字段应当有注释,描述该字段的用途及可能存储的内容,如枚举值则建议将该字段中使用的内容都定义出来;

5.是别的表的外键均使用xxx_id的方式来表明;

6.表的主键一般都约定成为id,自增类型;

7.时间字段,除特殊情况一律采用int来记录unix_timestamp;

8.网络IP字段,除特殊情况一律用bigint来记录inet_aton值;

9.所有字段,均为非空,最好显示指定默认值;

10.有些驱动对tinyint支持不够好,通常建义按容量来选择字段;

  1. text字段尽量少用,或是拆到冗余表中;

  2. 可能关联多个不同表的id的字段建议叫 RELATION_ID(关联id)
    ​ 时间以字段以 _TIME 后缀结尾
    ​ 带有标识的字段以 _FLAG 后缀结尾
    ​ 自定义code码字段以 _CODE 后缀结尾
    ​ 所有使用0,1,2等字段代表特殊含义的需要在字段注释中说明清楚,码中说明清楚,修改了定义规则需要及时修改数据库注释。

约定

  1. 表名_id – 通常用作外键命名
  2. cid – 特殊的编号,带有元数据,方便关联查询,你可以把它理解成类别(层次)编号。举个例子,产品在分类时,往往需要将其归类到子分类下,相应的字段中也一般只记录子分类的id,这时若需要知道该产品属于哪个主分类,就需要通过子分类信息再查询到主分类信息,这是比较麻烦的,cid字段就是要解决这个问题。一般的站点几十个分类肯定是够用了,所以这里假设某一主分类的cid为11,则子分类的cid从1101开始编号,处理时只需截取前两位数值便可知道该产品属于哪一个主分类了。
  3. add_time – 添加时间、上架时间等
  4. last_time – 最后操作时间,如登录、修改记录
  5. expire_time – 过期时间
  6. name – 商品名称、商家名称等,不要跟title混用,title只用于文章标题、职称等
  7. price – 价格
  8. thumb – 只要是列表页面中的窗口图,一律用此命名
  9. image_src – 相册中的图片地址一律用此命名,不要出现各种img,image,img_url,thumb_url等
  10. head_thumb – 用户头像, 虽然有点长,一定要遵守。不要出现上述情况
  11. image_alt – 相册中图片的alt属性
  12. desc – 描述、简介,比如goods_desc,不要出现goods_txt这种
  13. details – 详情、文章内容等
  14. order_id – 排序
  15. telephone – 座机号码
  16. mobile – 手机号码
  17. phone – 当不区分手机和座机时,请用phone命名
  18. address – 地址,单独出现不要用addr缩写,组合出现时需用缩写,比如mac地址,mac_addr
  19. zipcode – 邮编
  20. region – 地区,大的区域,比如记录杭州市、温州市等
  21. area – 区域,小的,比如上城区,江干区等
  22. avg_cost – 人均消费
  23. 待续

字段01标记
DEL_FLAG 逻辑删除标记,0未删除,1删除

索引命名规范

规则

普通索引:IDX_字段名
唯一索引:IDX_UQE_字段名
组合索引:IDX_COM_字段名_字段名_字段名

添加索引sql

    添加主键索引
ALTER TABLEtable_nameADD PRIMARY KEY (column) 添加唯一索引
ALTER TABLEtable_nameADD UNIQUE (column) 添加全文索引
ALTER TABLEtable_nameADD FULLTEXT (column) 添加普通索引
ALTER TABLEtable_nameADD INDEX index_name (column) 添加组合索引
ALTER TABLEtable_nameADD INDEX index_name (column1,column2,column3) 不需要使用索引情况: 表比较小,数据量不会多 赋值有限的列(枚举),不要创建索引。创建的索引返回的行越少越好,此时区分度大。 用不上索引的列,不要创建索引。 长字符串的列,不要全部创建索引,但可以使用短索引(名字的头8个字符)。 使用索引:
可能用到索引的地方:where 子句,order by,group by
索引有效的情况,使用如下筛选条件:
<,<=,=,>,>=,between,in,like’admin%’,独立索引+or+独立索引+mysiam 索引失效 is not null 或 is null 索引会失效 not in 或<> 或!= like查询是以%开头,不使用索引。like ‘%admin’ 关联表的id需要和关联表中的id的字符集,排序集一致,否则关联不会使用索引检索。 or+innodb 字符类型在where子句中不加引号,不使用索引 对字段加函数或者运算的 在order by操作中,mysql只有在排序条件不是查询条件表达式时才使用索引。尽管如此,在涉及多个数据表的查询里,即使有索引可用,那些索引在加快ORDER BY操作方面也没什么作用。 select 语句中字段中的子查询是不使用索引的,除非添加必要的别的条件来使用索引。
如:SELECT scolumn.ID,( SELECT COUNT(ID)FROMS_COMMENT AS discuss WHERE discuss.RELEVANCE_ID = article.SEQUENCE_ID' AND discuss.CODE ='资讯平路') AS discussCount FROM S_COLUMN AS scolumn LEFT JOIN S_ARTICLE AS article ON scolumn.ID = article.COLUMN_ID LEFT JOIN S_COMMON_ARTICLE AS commonArticle ON commonArticle.ARTICLE_ID = article.ID
这个子查询中 article.SEQUENCE_ID 和 RELEVANCE_ID都有索引确不会使用,而是用的是code的索引,所以要避免selec中子查询。 连接查询时,如果关联字段排序字符集不一样,则索引会失效,此点需在建表时注意。 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。 比如:列id均匀的分布在1-100之间。下面的sql则不会使用索引 `select * from table_name where id > 1 and id<90;`
1


MySQL_数据库命名规范及约定的更多相关文章

  1. (转)MySQL数据库命名规范及约定

    一.[操作规范]1. 如无备注,则表中的第一个id字段一定是主键且为自动增长:2. 如无备注,则数值类型的字段请使用UNSIGNED属性:3. 如无备注,排序字段order_id在程序中默认使用降序排 ...

  2. MySQL数据库命名规范及约定

    一.[操作规范]1. 如无备注,则表中的第一个id字段一定是主键且为自动增长:2. 如无备注,则数值类型的字段请使用UNSIGNED属性:3. 如无备注,排序字段order_id在程序中默认使用降序排 ...

  3. SQL Server数据库命名规范

    良好的命名习惯是一种美德,下面是个人整理的数据库命名规范: 数据库命名规范:  1. 数据库名:          1.1)用产品或项目的名字命名:         1.2)Pascal Case,如 ...

  4. MySQL数据库命名及设计规范

    1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完整性方面达到了最好平衡 ...

  5. mysql及php命名规范

    一.mysql命名规范 1.设计原则 1) 标准化和规范化数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完 ...

  6. NET 命名规范

    1 ADO.NET 命名规范 数据类型 数据类型简写 标准命名举例 Connection con conNorthwind Command cmd cmdReturnProducts Paramete ...

  7. MYSQL数据库命名与其设计规范

    你是否对获得MYSQL数据库命名与其设计规范 的实际操作感到十分头疼?如果是这样子的话,以下的文章将会给你相应的解决方案,以下的文章主要是介绍获得MYSQL数据库命名与其设计规范 的方案,以下就是相关 ...

  8. Java开发相关命名规范

    JAVA文件命名规范 1.类命名 抽象类以 Abstract 或者 Base 开头.异常类以 Exception 作为后缀.枚举类以 Enum 作为后缀.工具类以 Utils 作为后缀(相应的包名最后 ...

  9. Puppet主机、模块、类、资源、变量、参数、标签命名规范

    Puppet命名规范: 约定说明: 小写字母:"a-z" 大写字母:"A-Z" 数字: "0-9" 句号: "." 下划 ...

  10. MySQL数据库基本规范整理

    此篇文章是学习MySQL技术整理的,不足之处还望指教,不胜感激. 数据库基本规范涉及数据库命名规范.数据库索引设计规范.数据库基本设计规范.数据库字段设计规范.数据库SQL开发规范.数据库操作行为规范 ...

随机推荐

  1. CSS动画-数字轮盘滚动效果实现(组件封装,快速使用)

    效果图: 原理分析:这玩意就和垂直方向的轮播图差不多,只是把轮播的图换成数字 主要实现:父组件:父组件接收一个curNum属性,这个属性代表当前需要显示的数字.它将这个数字传递给子组件AnimateN ...

  2. 化繁为简|AIRIOT智慧水务信息化建设解决方案

    ​ "生产自动化,管理信息化"是现代化水厂建设的目标之一,需要在水质要求.工艺.生产.管理.环境等监测方面达到精细化管理标准,这是一个高度智能化,实现化繁为简智慧进阶的工程.传统水 ...

  3. Linux下tail -f,tail -F,tailf的区别

    在Linux中,tail -f ,tail -F,tailf都是用来查看滚动日志的好方法,但是三者之间却有着细微的不同: ​ tail -f 等同于--follow=descriptor,动态显示数据 ...

  4. MLP实现波士顿房屋价格回归任务

    1. 数据集 波士顿房屋价格.csv文件,文件中的数据有可能不完整,部分数据如下: CRIM, ZN ,INDUS ,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,LSTAT ...

  5. Js实现任意位置缩放图片,深入理解背后原理

    前言 本文将用一个简单的例子详细讲解如何用原生JS一步步实现完整的任意位置缩放图片功能,无任何第三方依赖,指针事件 进行多端统一的事件监听,干货满满. 完整代码 为提升阅读体验,正文中代码展示有部分省 ...

  6. Qt-FFmpeg开发-实现录屏功能(10)

    音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能 目录 音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能 1.概述 2.实现效果 3.FFmpeg录屏代码流程️‍️ ...

  7. docker使用Open Policy Agent(OPA)进行访问控制

    目录 一.系统环境 二.前言 三.Open Policy Agent 简介 四.Rego 语言简介 五.配置基本环境 六.docker安装OPA插件 6.1 安装docker 6.2 docker安装 ...

  8. 小程序转发 搜索wxml

    新闻转发 在小程序中要不通过菜单项来完成分享功能,只能通过表单组件中的按钮来完成. 它是通过按钮中的开放能力完成 按钮自定义处理 新闻搜索 搜索wxml 搜索业务的js

  9. react跨组件通信

    在react没有类似vue中的事件总线来解决这个问题,一是我们借助它们共同的父级组件通过代理的方式来实现,但过程会相当繁锁.react提供了Context来实现跨组件通信, 而不必显式地通过组件树的逐 ...

  10. ETL工具-nifi干货系列 第三讲 nifi web ui 使用教程

    1.nifi 服务启动之后,浏览器输入https://localhost:8443/nifi ,匿名登录或者输入用户名密码进入操作页面,如下图所示: 2.组件工具栏 处理器,鼠标放到图标上提示Proc ...