数据库设计

做为码农,不管是架构师还是普通开发人员,数据库的设计,表的设计是必不可少的一环,那么,怎样才能设计出一个符合规范,性能高的数据库呢?我分享一下最近学到的一些知识,如有不对的地方或者有更好的建议,欢迎交流!

1.表,字段的命名规范

        命名很重要的一点是看表名就知道存的内容,看字段名就知道其含义,当然命名也有一定的规范:

1)必须使用小写字母或数字
2)禁止出现数字开头
3) 禁止两个下划线中间只出现数字
4)不使用复数名词
5)禁用保留字
6)是与否概念的字段,必须使用 is_xxx 的方式命名
        数据库的数据类型有很多,我们要根据自己的业务采用合适数据类型,比如货币(人民币)采用bigint类型,身份证采用char类型,因为人民币最小的单位为分,以前的一些做法可能以元为单位,这样存数据就会出现类似0.05元这样的浮点数据,在程序里换算可能就会出现精度问题,所以把货币单位定为分,存数据就成了一个整型数据,比较容易换算,也避免了出现精度问题。我国的身份证(二代)都是18位这种定长度的,所以采用char类型是可以减少存储空间,再比如表示“是否”字段的,可以采用tinyint类型!
         我们在建表的时候很容易忽略id,create_time,update_time这三个字段,但这几个字段在追溯信息来源时往往需要用到,所以不要忘了加上,在程序里,实体类可以在基类加上这三个属性,VO,DTO等可以继承基类的这几个属性
2.索引
索引有那些分类呢?这个要看分类粒度(以innodb为例)
存储形式数据约束索引列数量可以创建的索引
聚集索引主键索引单列索引      主键索引
非聚集索引唯一索引组合索引唯一索引
非唯一索引普通索引

mysql默认的存储引擎是innodb,innodb索引结构采用的是B+TREE,那B+TREE的结构是什么样呢?

 索引的命名规范:

        1.主键索引名为 pk_字段名
        2.唯一索引名为 uk_字段名
        3.普通索引名则为 idx_字段名

 除了命名规范还需要注意一些问题:

        1. 有唯一特性的字段必须建成唯一 索引 
        2. 在 varchar 字段上建立索引时,必须指定索引长度 
        3. 建组合索引的时候,区分度最高的在最左边

 在使用的时候要注意下面的问题,避免索引失效或者回表查询

        1.防止因字段类型不同造成的隐式转换导致索引失效
        2.利用覆盖索引来进行查询操作避免回表 
        3.如果有 order by 的 场景,请注意利用 索引的有序性
        4.页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决

3.SQL规范

写sql语句的时候也要注意一些问题,罗列了一些,欢迎补充

        1.SQL语句尽可能简单
        2.保持事务(连接)短小
        3.尽可能避免使用SP/TRIG/FUNC
        4.尽量丌用 SELECT *
        5.改写OR语句
        6.避免负向查询和% 前缀模糊查询
        7.LIMIT的高效分页
        8.用UNION ALL 而非 UNION
        9.分解联接保证高幵发
        10.GROUP BY 去除排序
        11.同数据类型的列值比较
        12.Load data导数据
        13.打散大批量更新

 4.数据库的三大范式

        第一范式:每列属性不可拆分

        第二范式:表中每列都和主键相关

        第三范式:每列都和主键直接相关,而不是间接相关

虽然有三大范式,也不必完全满足,主要还是根据自己的业务,如果一些冗余数据能更方便的操作数据库,且对性能没太大的影响,完全可以允许冗余数据的出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值