DB设计流程:

1,需求分析
2,ER设计
3,物理设计
需求分析的最佳实践是头脑风暴,把需求理解透彻。根据公司的现况和未来的发展,与pm一起来讨论。
ER(EntiyRelation)设计阶段要确定各个模块和模块之前的关系,用来表达的语言就是ER图,可以让人清晰的了解到表的设计和关系,工具用 workbench 来设计。
物理设计阶段,需要做具体的技术选型,选择合适的RDMS(比如Oracle、MySQL等等),设计表的字段类型,给表取一个 更好的名字。

物理设计的最佳实践和总计:

    1、数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;命名简洁明确(长度不能超过30个字符);例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个前缀;除非是备份数据库可以加0-9的自然数:user_db_20151210;  
    2、数据库表名命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;命名简洁明确,多个单词用下划线'_'分隔;例如:user_login, user_profile, user_detail, user_role, user_role_relation,user_role_right, user_role_right_relation表前缀'user_'可以有效的把相同关系的表显示在一起;3、数据库表字段名命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;命名简洁明确,多个单词用下划线'_'分隔;例如:user_login表字段 user_id, user_name, pass_word, eamil, tickit, status, mobile, add_time;每个表中必须有自增主键,add_time(默认系统时间)表与表之间的相关联字段名称要求尽可能的相同;4、数据库表字段类型规范用尽量少的存储空间来存数一个字段的数据;例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256);IP地址最好使用int类型;固定长度的类型最好使用char,例如:邮编;能使用tinyint就不要使用smallint,int;最好给每个字段一个默认值,最好不能为null
    5、数据库表索引规范命名简洁明确,例如:user_login表user_name字段的索引应为user_name_index唯一索引;为每个表创建一个主键索引;为每个表创建合理的索引;建立复合索引请慎重;

数据库设计范式:

一,第一范式又称为1NF(First Normal Form),是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。
数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 如果出现重复的属性,
就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

简而言之,第一范式就是没有重复的列。

二,第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式必须先满足第一范式(1NF)。
 第二范式要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。

简而言之,第二范式就是属性应完全依赖于其主键。

三,满足第三范式(3NF)必须先满足第二范式(2NF)。第三范式要求数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖。
所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。

简而言之,第三范式就是任一非主键属性不应依赖于其它任何非主键属性。它是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余

数据表的关系:

在关系型数据库中,弄清各个模块(或者叫实体或者叫表)之间的关系非常重要。关系型数据库中有三种基本关系:

  1. 1 - 1,比如一个国家对应一个首都
  2. 1 - N,比如一个分类下可以有多个商品,一个班级有多个学生,这种关系往往存在从属关系
  3. N - N,比如学生和课程,一个学生可以选多门课,不同的学生也可以选择同一门课

数据库设计原则:

  1. 一般表除了“语义上”的主键之外最好有一个自增主键
  2. 避免使用外键约束,触发器
  3. 不要用预留字段
  4. 反范式设计提高效率
详细解析:
1、核心原则不在数据库做运算;cpu计算务必移至业务层;控制列数量(字段少而精,字段数建议在20以内);平衡范式与冗余(效率优先;往往牺牲范式)拒绝3B(拒绝大sql语句:big sql、拒绝大事物:big transaction、拒绝大批量:big batch);2、字段类原则用好数值类型(用合适的字段类型节约空间);字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能);避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效);少用text类型(尽量使用varchar代替text字段);3、索引类原则合理使用索引(改善查询,减慢更新,索引一定不是越多越好);字符字段必须建前缀索引;不在索引做列运算;innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)(理解Innodb的索引保存结构就知道了);不用外键(由程序保证约束);4、sql类原则sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库);简单的事务;避免使用trig/func(触发器、函数不用客户端程序取而代之);不用select *(消耗cpu,io,内存,带宽,这种程序不具有扩展性);OR改写为IN(or的效率是n级别);OR改写为UNION(mysql的索引合并很弱智);select id from t where phone = ’159′ or name = ‘john’;=>select id from t where phone=’159′unionselect id from t where name=’jonh’避免负向% ;limit高效分页(limit越大,效率越低);使用union all替代union(union有去重开销);少用连接join;使用group by;请使用同类型比较;打散批量更新;

转载于:https://www.cnblogs.com/hk-faith/p/8718000.html

mysql设计规范和原则相关推荐

  1. mysql数据库设计规范_MYSQL数据库设计规范与原则

    MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...

  2. mysql 数据库设计规范_MYSQL数据库设计规范与原则

    MYSQL数据库设计规范 1.数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; 命名简洁明确(长度不能超过30个字符); 例如:user, stat ...

  3. mysql 按日期拆分成多条记录_mysql性能优化2 设计规范 设计原则 结构优化 拆分 配置优化...

    一.MYSQL数据库设计规范 1.数据库命名规范 a.采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; b.命名简洁明确(长度不能超过30个字符); c.例如:us ...

  4. MYSQL数据库设计规范与原则

    有远大抱负的人不可忽略眼前的工作!!! MYSQL数据库设计规范与原则 MYSQL数据库设计规范 1.数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成; ...

  5. 系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]

    一.上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来.在这里我们简单回顾上篇讲解的内容. 上图中已经简单介绍了上章讲述的内容,具体内容 ...

  6. MYSQL数据库设计原则

    一.MYSQL数据库设计原则 1.核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先:往往牺牲范式) 拒绝3B(拒绝大 ...

  7. 数据库-优化-MYSQL数据库设计原则

    MYSQL数据库设计原则 1.核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先:往往牺牲范式) 拒绝3B(拒绝大sq ...

  8. MySQL最左匹配原则,道儿上兄弟都得知道的原则

      自MySQL5.5版本起,主流的索引结构转为B+树.B+树的节点存储索引顺序是从左向右存储,在检索匹配的时候也要满足自左向右匹配. 目录 一.最左匹配原则的原理 二.违背最左原则导致索引失效的情况 ...

  9. MySQL最左匹配原则

    阅读目录 阐述 一.最左匹配原则的原理 二.违背最左原则导致索引失效的情况 三.查询优化器偷偷干了哪些事儿 四.知识点 阐述 通常我们在建立联合索引的时候,相信建立过索引的同学们会发现,无论是Orac ...

最新文章

  1. 多通道ADC一致性的高精度测量方法
  2. jwt token长度限制_ASP.NET Core Web Api之JWT(一)
  3. 线性回归中的前提假设
  4. FromBottomToTop团队项目总结
  5. 【CAD制图视频】AutoCAD 2014 高手之道
  6. 泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)
  7. dede plus ad js.php,织梦程序中plus文件作用介绍及安全设置
  8. TypeScript 3.4 发布
  9. html+fadein动画,使用Animate.css制作超炫的CSS3动画
  10. Gym102174 (The 14-th BIT Campus Programming Contest)
  11. 利用旧电脑搭建NAS(黑群晖)
  12. 763-GMAX3809 1.1” 900万分辨率全局快门CMOS图像传感器
  13. Paypal移动快速支付流程
  14. 服务器自动启动的原因,服务器经常自动重启是什么原因
  15. Reactor 反应堆
  16. 识人、识货、识场—— 这就是智能零售该有的样子
  17. springboot+mybatis+新加属性自动加数据库字段
  18. android 白色圆点,Android通知图标是一个白色圆圈
  19. 虾皮面试真题:虾皮后端15连问!
  20. Linux mint 双硬盘,记一次装机——笔记本UEFI双硬盘(SSD+机械)双系统(Win10+Linux Mint)...

热门文章

  1. java web利用mvc结构实现简单聊天室功能
  2. sharepoint 2010 内容类型
  3. [导入]24小时第六季 剧情
  4. 中文乱码,也许这个小技巧可以帮到你
  5. 金属表面划痕检测Halcon
  6. springboot整合mysql5.7_springboot整合mybatis访问mysql,数据库
  7. tendermint+java_tendermint简介
  8. c++用二叉树表示代数表达式_C语言:数据结构-二叉树的定义和基本术语和二叉树的性质...
  9. java 把char转换成int型,java如何把char型数据转换成int型数据(转)
  10. 模板匹配—归一化相关系数匹配算法