数据库表设计

1、数据类型要合理

  1、对于数字和日期类型,一般不要采用varchar类型,这个陷阱很容易被接受

    1、容易带来隐式类型转换,导致索引失效,例如 where a=123; avarchar列,实际存储数字类型值

    2、容易带来数据质量的下降,例如日期类型 '2019-01-23''2019-23-01',非常不利于将来的分析计算和比较

  2、常用数据类型包括varchardatenumber,要注意数据范围,防止数据输入时出现溢出,对表进行ddl会导致海量IO和锁表

 

2、表上列的选择要适当遵守范式

  1、范式要解决的核心问题是数据冗余,数据冗余会带来数据不一致问题,因此对于不能承受数据不一致的一些列数据,不要出现在多个表中

例如用户手机号码

 

3、表上列的数量要适当,不要出现大宽表,表上列数量过多带来的问题

  1、表上列数量多,表上承载的业务类型和业务数量就多,对于系统的并发性会带来很大的问题

    订单表:订单信息、支付信息、物流信息、评价信息、签收信息

  2、表上列数量多,容易出现大量的空列,对于后期进行数据分析带来很多弊端

  3、表上列数量多,一个数据页容纳的数据行会减少,对于后期select操作会带来严重的性能问题

 

4、频繁访问的主表,尽量不要将大宽列放在表中,例如商品信息表中的商品图片、商品详细描述

  采用垂直拆分的方式对大宽列进行拆分

 

5、适当采用逆范式化来提升表的访问性能,逆范式化就是某些高频访问列出现在多个表中,注意数据一致性的保障

 

6、数据尽量不要为空、适当采用非空约束not null属性

 

7、字符集和合理设置,一般建议在数据库层面设置字符集。某些特殊情况可以在表级别和列级别设置字符集

 

8、约束

  1、主键约束:非空、唯一

  2、唯一键约束:唯一、可以存在多个空值,注意对空值进行比较的时候,要采用is nullis not null的方式,不能进行null=null之类的比较方式

  3、非空约束

  4default约束,日期类型和布尔类型经常会采用default约束

  5、外键约束

    外键约束会带来性能的降低

    外表中插入数据需要访问主表主键索引或者外键索引

    主表删除或者修改主键值,需要对外表进行访问或者对应修改,这个需要参考外键级联策略(级联删除、级联修改、级联set nullno action)

    尽量减少对外键的使用

    外键列上一定要索引,默认会建立索引

 

9、强烈建议表上要显式建立主键

posted @ 2019-07-29 19:14  Tech_Shrimp  阅读(365)  评论(0编辑  收藏  举报