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设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值