T31实战-Day3:勿以善小而不为 勿以恶小而为之
今天跟随着T31的第三节课,Mysql约束与规范,无尘大咖主讲。整体谈了mysql的实操规范,言简意赅,直击痛点;当然听这课程还是需要有mysql一些实际基础(索引、数据结构等层面)作为理解的支撑;给我最大酣畅淋漓的感觉是,无尘老师把购票系统数据库设计从需求到mysql落地过程的解析,讲的过程一气呵成、逻辑性极强。那一刻,记忆的尘埃在脑中翻滚,那么似曾相识而又清晰可见。
课程主要讲了两部分,Mysql规范和实操:
Mysql规范,包括:建表规约、索引规约、SQL与ORM映射规约;
实操:数据库设计实战。
一、Mysql规范
1. 建表规约
a. 目的:解决数据库相关名称的纠结
选择合适的数据类型和长度
b. 要求:
1)表、字段命名:
• 必须使用小写字母或数字
• 禁止出现数字开头
• 禁止两个下划线中间只出现数字
• 不使用复数名词
• 禁用保留字
• 是与否概念的字段,必须使用 is_xxx 的方式命名
2)数据类型:小数类型为 decimal ;货币数据使用最小货币单位,数据类型为bigint ;字符串长度几乎相等使用 char; varchar长度不要超过 5000
3)表必备三字段:id、create_time、update_time
4)建表推荐规约:表的命名最好是遵循 “业务名称_表的作用;库名与应用名称尽量一致;如果修改字段含义或对字 段表示的状态追加时,需 要及时更新字段注释;字段允许适当冗余,以 提高查询性能,但必须 考虑数据一致;单表行数超过 500 万行或 者单表容量超过 2GB,才 推荐进行分库分表
2. 索引规约
1)目的:提高查询效率的有效手段
合理的分析及使用索引
2)索引的分类:
a. 存储形式:1.聚簇索引 2.非聚簇索引
b. 数据约束:1.主键索引 2.唯一索引 3.非唯一索引
c. 索引列的数量:1.单列索引 2.组合索引
d. innoDB可以创建的索引:1.主键索引 2.唯一索引 3.普通索引
3)索引的数据机构: 二叉查找树 ---》btree ----》b+tree
2. 索引名称规约
1)索引命名: 主键索引名为 pk_字段名\唯一索引名为 uk_字段名\普通索引名则为 idx_字段名
2)创建索引规约:1. 有唯一特性的字段必须建成唯一 索引\2. 在 varchar 字段上建立索引时, 必须指定索引长度\3. 建组合索引的时候,区分度最高 的在最左边。
3. SQL规约
目的: 优化SQL语句的要点 • Explain的使用指南
a. 注意字段类型 防止因字段类型不 同造成的隐式转换,导致索引失效
b. 利用覆盖索引 利用覆盖索引来进 行查询操作,避免 回表
c. 利用有序性 如果有 order by 的 场景,请注意利用 索引的有序性
d. 禁模糊 页面搜索严禁左模 糊或者全模糊,如 果需要请走搜索引 擎来解决。 利用有序性 如果有 order by 的 场景,请注意利用 索引的有序性 利用覆盖索引 利用覆盖索引来进
e. SQL规约-count:不要使用 count(列名) 或 count(常量)来替代 count(*)/count(distinct col) 计 算该列除 NULL 之外的 不重复行数/当某一列的值全是 NULL 时,count(col) 的返回结果为 0,但 sum(col)的返回结果 为NULL
4. ORM映射规约
目的:优化SQL语句的要点 • Explain的使用指南 • ORM映射的避坑指南
a. 在表查询中,一律不要 使用 * 作为查询的字段 列表;
b. POJO 类的布尔属性不 能加 is,而数据库字段 必须加“is_”
c. 查询返回结果都需要使 用ResultMap映射
d. 不要使用${}
e. 不要使用MyBatis 自带 的 queryForList方法;
f. 不允许直接使用 HashMap 与 Hashtable 接收结果集;
g. 更新数据表记录时,必 须同时更新 update_time;
h. 不要写一个大而全的数 据更新接口
二、实战演练
一). T31业务需求:
1. 乘客通过网站注册登录。 2. 实名认证通过mock实现 3. 铁路部门管理员有如下功能 - 车次、车厢、经停站、时刻表的增删改查 - 用户管理:用户增删改查,黑名单管理,为用户分配角色 - 角色管理:角色增删改查,为角色分配相应的功能 - 菜单管理:菜单增删改查 4. 定时任务:生成火车票 5. 普通用户有如下功能 - 修改信息:密码,住址,电话,邮箱等 - 代购功能:录入其他乘客信息,合并下单支付 - 余票查询:可以通过车次、出发站、到达站、日期等条件查询 - 购买车票下单:选择车次,选择乘车人,座位类型后下单 - 订单支付:第三方支付,支付宝支付、微信支付 6. 支付成功后系统通知用户
二)实际ER设计
实际设计ER图,摘出上述需求点的名词:用户、车次、车厢、经停站、时刻表。
如上再加乘车区间进行ER设计。
T31实战-Day3:勿以善小而不为 勿以恶小而为之相关推荐
- sql优化--勿以善小而不为 勿以恶小而为之
最近换新的工作,从java开发转到sql运维,开发时只写一些简单的查询,对sql的优化并没有深入认识,2个月sql运维让我对sql有了点新的认识.记录一下
- 勿以恶小而为之,勿以善小而不为
居勿以恶小而为之,勿以善小而不为. Do not fail to do good even if it's small, do not engage in evil even if it' ...
- 勿以善小而不为,勿以恶小而为之
如今的善恶已经没有了统一的标准,已经是仁者见仁,智者见智了. 曾经给乞讨者一些小钱觉得是善事,现在已经觉得这样做是在滋养不劳而获而已.这其中自有真实的困难者,但作为凡人的我着实难于分辨,顾已形成漠然的 ...
- 勿以恶小而为之,勿以善小而不为。
勿以恶小而为之,勿以善小而不为.惟贤惟德,能服于人. -- 刘备 刘备简介 [出处]<三国志·蜀书·先主传>裴松之注. [大意]不要以为坏事小就去做,不要以为好事小就不去做. [提示]这是 ...
- 软件设计:勿以善小而不为,勿以恶小而为之
在实现一个软件系统时,作为系统的设计.实现人员,我们往往需要在选择一个好的方案或者说设计.有些选择针对的是诸如框架等大方向的设计,但更多的时候我们面临的则是针对某个具体模块或函数等小问题的解决方案的选 ...
- 超短线炒股:勿以善小而不为,勿以恶小而为之
什么是短线操作,或者说什么是超级短线操作,那就是"追涨杀跌",如果你对"追"."杀"两字有厌恶,说明你不具备做短线的思想基础,就根本不是股市 ...
- 孤尽T31项目Day3
孤尽T31项目Day3 Mysql设计规范 1 建表规约 1.1 表.字段的命名 1.必须使用小写字母或数字. 2.禁止出现数字开头. 3.禁止两个下划线中间只出现数字. 4.不使用复数名词. 5.禁 ...
- 阿里百秀项目实战day3
待实现功能 1.数据展示 2.页数跳转,页面切换 3.分类筛选 退出界面 categories页退出,在navbar中把退出时跳转页面改为 <li><a href="/ad ...
- 今日分享——点点小事对人的影响
点滴小事对人的影响 &emsp:今天在提高班,纪老师给我们开了一个有关于"节日祝福"的会议,在会议上,纪老师就有关于"节日祝福"这一话题展开来了说明,讲 ...
最新文章
- 生物信息课程学习 --- 比对,BLAST,马尔可夫
- HDU4858 项目管理 其他
- ieee期刊_IEEE期刊的双栏排版中的图片位置问题
- shopxo二次开发:商品管理添加、商品导入库存、设置库存量(教程)
- 唤起你对c#曾经的记忆
- 教你一步搭建Flume分布式日志系统
- docker-compose.yml模板文件
- 寒假作业3(传说中的写软件)
- 给初学编程的人的忠告
- WebP是什么格式?如何免费批量转换JPEG
- Unity RenderTexture实现 刮彩票、橡皮擦、擦除效果(3D物体)
- WIN7下安装WIN2003系统
- 固态硬盘和机械硬盘的区别是什么
- 有关Cidaemon.exe服务占用大量CPU资源的解决办法
- 六下计算机教学总结,六年级下册信息技术教学工作总结
- photoshop图层解锁及不能解锁的原因
- Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)
- 如何使用gcore工具获取一个core文件而不重启应用?
- 【SOFA】SOFA框架+Win10+VS2019 配置
- 分布式发号器——Vesta
热门文章
- android 打印机 api,【报Bug】蓝牙打印API写入中文乱码(包括安卓、IOS)
- 然我的悲伤留不住你的脚步,就让我的笑容绝尘于你的背影中
- JavaScript教程:使用P5.js创建带纹理的纸张背景
- 2021年美容师(初级)考试题及美容师(初级)考试总结
- 自考计算机英语答题技巧,自考英语一考试答题技巧汇总
- 20个冷到掉渣的笑话
- php友情链接怎么做,如何让zblogphp程序友情链接仅在网站首页显示?做手赚网必知!...
- ubuntu+xenomai+igh
- 定时关机命令:教你如何在Windows XP使用定时关机命令
- 继承,封装,多态和值传递引用传递