美文网首页
数据库表设计思路

数据库表设计思路

作者: 舞鹤Roc | 来源:发表于2021-12-09 14:03 被阅读0次

数据库的知识从基础的SQL语法(DDL、DML、DCL、DQL)、事务(隔离级别&传播级别)、索引(下推&命中)、锁(MVCC和LBCC),到其中的应用技巧与底层原理,错综复杂,学习成长之路漫漫。

本文先抛开上述,总结一下自己在实践中领悟到的数据库设计的思路,万事开头难,只要表结构设计得当,可以省去后期诸多不必要的SQL优化,事半功倍。

1、数据库的选择:关系型数据库 or 非关系型数据库

主业务数据普遍选择建立在\color{#FF0000}{关系型数据库} 中,方便维护,考虑业务数据量巨大或者是审计日志、操作记录等非主要业务数据,可以使用NoSql\color{#FF0000}{非关系型数据库},减少对主数据库的存储及性能压力。
业务的增长会让数据量的估值不够准确,而后常常会根据业务特性使用\color{#FF0000}{分表 or分库【水平 or 垂直】}的方案的来解决性能瓶颈。

2、恰当的关联关系:基于业务关系的梳理

  • A表对B表\color{#FF7D00}{一对一} :A或B上建立关联主键皆可,通常看驱动关系或者数据流向,如果A->B或者说B依赖A,建议在B表上建立A表关联主键;
  • A表对B表\color{#FF7D00}{一对多} :在B表上建立A表的关联主键;
  • A表对B表\color{#FF7D00}{多对多} :建立新的关联表来记录A和B的关联关系。

3、表粒度

可以通过增加type区分的业务组合,减少重复表结构的建立,相对代码也是对表的一种封装;
业务数据隔离或者数据量庞大的情况,即使表结构类似,也应当独立出来;
业务字段过多,可能根据业务划分出基础信息、扩展信息表等;
\color{#0000FF}{版本表 or 历史表} ,通常独立于主业务表,否则会影响主业务表的性能和结构化关系。

4、常用字段的处理:mysql5.7+

  • 考虑存储大小:满足业务需求
    varchar(30)可以存储 30个数字/30个字母/30个汉字;
    longtext可以无限存储;
    date只能存日期,timestamp和datetime可以精确到时分秒;
    整型和浮点型BigDecimal。
  • 考虑占用空间:限制每个表最多存储4096列,并且每一行数据的大小不能超过65535字节
    date类型 3字节、timestamp类型 4字节、datetime类型 8字节;
    char(n) n字节 ; vharchar(n) 3n+2字节[如果是UTF-8编码,2存储长度],如果是可以为null的字段,还要加1。
  • 考虑场景\color{#FF00FF}{建立必要的索引}
    莫非定理下的唯一性索引;
    常用查询的普通索引或者联合索引。

数据库知识丰富多彩,耐人寻味,多看几遍58沈剑数据库30条军规、阿里数据库操作规范等,学习理论结合工作实践,提升技术,提升对数据库的理解。

相关文章

网友评论

      本文标题:数据库表设计思路

      本文链接:https://www.haomeiwen.com/subject/oasffrtx.html