0
点赞
收藏
分享

微信扫一扫

工作3年,总结下如何设计数据库

在日常工作中,数据库的设计总是一大难的问题,是该选择关系型数据库还是非关系型数据库?表结构字段该如何设计?表之间如何关联?很多人可能无从下手,该遵循什么原则,现在根据本人的3年工作经验,在本篇文章中讲明如何设计数据库,因认知有限,如有误,欢迎指点!

数据库的设计主要从以下几个方面进行考虑:

  1. 数据库的选型
  2. 存储引擎的选择
  3. 表结构的设计
  4. 数据库的优化

所以本文的目录结构(章节)也分为以上四个,每个章节将会对四类主题进行介绍

一、数据库的选型

市面上有各种数据库,可以根据下面的条件进行分类

1)海量数据:可以理解为大数据类型,可选的数据库包括

2)数据结构:主要是分为行或列数据库,行存储主要应用于传统的业务场景中,而列存储则发挥他查询速度方面的优势,主要用于海量数据分析一类的方面

3)是否宽表:字段的数量

4)数据属性:可分为常用数据、辅助数据(比如日志)

5)要求事务:是否支持事务

6)实时性:例如写的要求高、读延迟低等场景

7)查询量:例如是查询大量数据的少数列,还是少数数据的所有列

8)一致性要求

9)增删改查的要求:比如日志、报表、行为分析的场景,对查询的性能要求不一样

所有系统的99%业务都是用结构化数据,即关系型数据库,只要优化的是关系型数据库,sql和nosql是互补的关系

现在主流的数据库如下:

类型 数据库
关系型 MySQL、Oracle
列示 HBase
键值对 Redis、Memrached
文档 MongoDB
时序 InfluxDB
搜索 ES

二、存储引擎

选择存储引擎是从以下三点进行考虑

1)支持的字段和数据类型

2)锁类型

3)事务

注意:innodb不支持hash索引,创建hash索引不会报错,会被替换成btree

三、表结构设计:

表结构设计考虑:表、字段、索引,可以自由选择下面两个方向设计数据库:

1)先设计表结构与关系,再考虑上层对象的关系

适用情况:项目工期不急,稳定性高,扩展性要求高

步骤:先设计数据库关系,再设计对象(考虑到数据库表的所有操作,以后的任何需求都能再设计的框架里面,可以随意的加字段)

2)先设计对象,再连接关系

适用情况:工期赶,需要快速的设计出数据库,便于实施和理解,但是这样扩展性较低

步骤:先设计对象,比如学生表、教师表,根据对象设计出表结构并连接表,以后需要加字段比较麻烦

Tip:设计数据库要重点考虑底层数据关系,对象关系用来辅助设计

当遇不清楚字段是否需要保留时,思考是否会引起下列问题,从而决定是否保留字段:

1)数据不一致

2)允许部分数据冗余(反范式)

3)crud异常(某些数据的缺失,导致部分数据不能操作,eg:删除异常,删除数据导致其他字段缺失)

举报

相关推荐

0 条评论