专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

数据库设计规范,mysql数据库设计规范

来源:小易整编  作者:小易  发布时间:2023-03-23 12:06
摘要:数据库设计规范,mysql数据库设计规范规范背景与目的MySQL数据库与Oracle、SQLServer等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等...

数据库设计规范,mysql数据库设计规范

数据库设计规范,mysql数据库设计规范

规范背景与目的

MySQL 数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用 MySQL 数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导 RD、QA、OP 等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL 编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。

数据库设计

以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。

对于不满足【高危】和【强制】两个级别的设计,DBA 会强制打回要求修改。

一般命名规则

  1. 【强制】使用小写,有助于提高打字速度,避免因大小写敏感而导致的错误。

  2. 【强制】没有空格,使用下划线代替。

  3. 【强制】名称中没有数字,只有英文字母。

  4. 【强制】有效的可理解的名称。

  5. 【强制】名称应该是自我解释的。

  6. 【强制】名称不应超过 32 个字符。

  7. 【强制】避免使用前缀。

  1. 【强制】遵守以上全部一般命名规则。

  2. 【强制】使用单数。

  3. 【强制】库的名称格式:业务系统名称_子系统名。

  4. 【强制】一般分库名称命名格式是库通配名_编号,编号从 0 开始递增,比如 northwind_001,以时间进行分库的名称格式是库通配名_时间。

  5. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是 utf8 或者 utf8mb4。创建数据库 SQL 举例:

create database db_name default character set utf8;

  1. 【强制】遵守以上全部一般命名规则。

  2. 【强制】使用单数。

  3. 【强制】相关模块的表名与表名之间尽量体现 join 的关系,如 user 表和 user_login 表。

  4. 【强制】创建表时必须显式指定字符集为 utf8 或 utf8mb4。

  5. 【强制】创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为 InnoDB。当需要使用除 InnoDB/MyISAM/Memory 以外的存储引擎时,必须通过 DBA 审核才能在生产环境中使用。因为 InnoDB 表支持事务、行锁、宕机恢复、MVCC 等关系型数据库重要特性,为业界使用最多的 MySQL 存储引擎。而这是其它大多数存储引擎不具备的,因此首推 InnoDB。

  6. 【强制】建表必须有 comment。

  7. 【强制】关于主键:(1) 命名为 id,类型为 int 或 bigint,且为 auto_increment;(2) 标识表里每一行主体的字段不要设为主键,建议设为其它字段如 user_id,order_id等,并建立 unique key 索引。因为如果设为主键且主键值为随机插入,则会导致 InnoDB 内部 page 分裂和大量随机 I/O,性能下降。

  8. 【建议】核心表(如用户表,金钱相关的表)必须有行数据的创建时间字段 create_time 和最后更新时间字段 update_time,便于排查问题。

  9. 【建议】表中所有字段必须都是 NOT NULL 属性,业务可以根据需要定义 DEFAULT 值。因为使用 NULL 值会存在每一行都会占用额外存储空间、数据迁移容易出错、聚合函数计算结果偏差等问题。

  10. 【建议】建议对表里的 blob、text 等大字段,垂直拆分到其它表里,仅在需要读这些对象的时候才去 select。

  11. 【建议】反范式设计:把经常需要 join 查询的字段,在其它表里冗余一份。如 username 属性在 user_account,user_login_log 等表里冗余一份,减少 join 查询。

  12. 【强制】中间表用于保留中间结果集,名称必须以 tmp_ 开头。备份表用于备份或抓取源表快照,名称必须以 bak_ 开头。中间表和备份表定期清理。

  13. 【强制】对于超过 100W 行的大表进行 alter table,必须经过 DBA 审核,并在业务低峰期执行。因为 alter table 会产生表锁,期间阻塞对于该表的所有写入,对于业务可能会产生极大影响。

字段

  1. 【强制】遵守以上全部一般命名规则。

  2. 【建议】尽可能选择短的或一两个单词。

  3. 【强制】避免使用保留字作为字段名称:order,date,name 是数据库的保留字,避免使用它。可以为这些名称添加前缀使其易于理解,如 user_name,signup_date 等。

  4. 【强制】避免使用与表名相同的字段名,这会在编写查询时造成混淆。

  5. 【强制】在数据库模式上定义外键。

  6. 【强制】避免使用缩写或基于首字母缩写词的名称。

  7. 【强制】外键列必须具有表名及其主键,例如:blog_id 表示来自表博客的外键 id。

字段数据类型优化

  1. 【建议】表中的自增列(auto_increment 属性),推荐使用 bigint 类型。因为无符号 int 存储范围为 0~4,294,967,295(不到 43 亿),溢出后会导致报错。

  2. 【建议】业务中选择性很少的状态 status、类型 type 等字段推荐使用 tinytint 或者 smallint 类型节省存储空间。

  3. 【建议】业务中 IP 地址字段推荐使用 int 类型,不推荐用 char(15)。因为 int 只占 4 字节,可以用如下函数相互转换,而 char(15) 占用至少 15 字节。

select inet_aton('192.168.2.12');select inet_ntoa(3232236044);

Java 保存字符串ip 转 int 类型

public static long ipToLong(String addr){    String[] addrArray = addr.split("\\.");    long num = 0;    for (int i = 0; i < addrArray.length; i++)    {        int power = 3 - i;        num += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power)));    }    return num;}public static String longToIp(long i){    return ((i >> 24) & 0xFF) + "." +           ((i >> 16) & 0xFF) + "." +           ((i >> 8) & 0xFF) + "." +           (i & 0xFF);}

4.【建议】不推荐使用 enum,set。 因为它们浪费空间,且枚举值写死了,变更不方便。推荐使用 tinyint 或 smallint。


本文地址:百科问答频道 https://www.neebe.cn/wenda/937348.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • UI设计之Sidebar(侧边栏)设计欣赏

    UI设计之Sidebar(侧边栏)设计欣赏

    现在网页设计流行兼容手机端,一些导航或其它小元素都喜欢用侧边栏的方式展示。侧边栏就这么点大小,那么如何设计才更美观且用户体验更好呢?今天设计达人网小编为大家整理一系列设计美观的侧边栏UI设计作品,风格多样,如果你不知道怎样制作,请看看这些精...

  • 原型设计是什么意思?

    原型设计是什么意思?

    原型设计是指在产品开发过程中,使用原型技术来模拟并表示最终成品及其主要功能的一项重要工作。原型设计主要用于设计和验证可交互式数字产品,比如手机应用程序、游戏、软件、网站和硬件产品的用户界面(UI)和用户体验(UX)设计。这是一种设计工具,...

  • 数据库管理是什么意思?

    数据库管理是什么意思?

    数据库管理是指通过数据库管理系统来管理、访问存储在数据库中的数据的过程。它也和实现电子档案库、图书馆的相关软件的开发有着密切的联系。数据库管理特别强调数据的独立性和可移植性,从而保证数据的可靠性和安全性。数据库管理的主要作用,是把一些内容...

  • 如何设计完美密码?

    如何设计完美密码?

    当互联网时代来临,人们从未像现在这样害怕自己的密码和隐私遭到破解或盗取,那么有没有一种可靠的密码设置方法呢?答案是肯定的。已经在互联网安全领域混迹多年的专家BruceSchneier近日向人们给出了如何设置“完美密码”的方法,而想要让自己...

  • 共享数据库是什么意思?

    共享数据库是什么意思?

    共享数据库是一种常见的开发工作流程,即团队中的所有开发人员都共享某一个数据库的访问权限,都使用该数据库来支持应用程序开发。无需为每个工程师配置基础架构,使安装成本降至最低,因而人们愿意选择它。但由于工程师做出改变的同时不得不承担着影响其他...

  • 公用数据库是什么

    公用数据库是什么

    公共数据库是指数据库软件(如Access、SQLServer等)生成的各种包含元器件信息的表格文件。AltiumDesign通过创建和使用关联数据库DBLib文件,可直接从公共数据库调取元器件并通过连接库文件与公共数据库保持同步更新。公共...

  • 互动设计是什么

    互动设计是什么

    交互设计,又称互动设计,(InteractionDesign,缩写IxD或者IaD),是定义、设计人造系统的行为的设计领域,侧重在交互模式的设计。交互设计,又称互动设计,(英文InteractionDesign,缩写IxD...

  • 关系型数据库的基本原理是什么

    关系型数据库的基本原理是什么

    关系型数据库采用的是关系模型,即把数据组织成一个或多个表格(称为关系),每个表格包含多个列,每行代表一个记录。这种模型的优点是简单易懂,容易维护,便于数据查询和修改。其次是数据结构,关系型数据库采用的是二维表格结构,每个表格有一个主键用于唯...

  • 周排行
  • 月排行
  • 年排行

精彩推荐