数据库设计笔记

需求分析

数据库设计简介

  1. 什么是数据库设计?
    简单来说,数据库设计就是根据业务系统的具体需要结合我们所选用的DBMS(数据库管理系统),为这个业务系统构造出最优的数据存储模型。并建立好数据库中的表结构及表与表之间的关联关系的过程。使之能有效的对应用系统中的数据进行存储,并可以高效的对已经存储的数据进行访问。重点在于有效的数据存储和高效的对数据进行访问
  2. 为什么要进行数据库设计?
    刚开始未对数据库进行有效的设计,在后期业务逻辑复杂的时候往往会暴露出很多问题。
    优良的设计 糟糕的设计
    减少数据冗余 存在大量数据冗余
    避免数据维护异常 存在数据插入、更新、删除异常
    节约存储空间 浪费大量存储空间
    高效的访问 访问数据低效

数据库设计的步骤

主要有四个步骤:

  • 需求分析->数据库需求的作用点包括:数据是什么、数据有哪些属性、数据和属性各自的特点有哪些等。
  • 逻辑设计:主要是使用ER图对数据库进行逻辑建模。
  • 物理设计:根据不同的数据库(MySQL、Oracle、SQL Server等)自身的特点把逻辑设计转换为物理设计。通常企业级应用选择Oracle或者SQL Server,互联网中小型选择MySQL即可。
  • 维护优化:在此期间会对新的需求进行建表、索引优化、大表拆分等工作。

需求分析重要性简介

为什么要进行需求分析?

  1. 了解系统中所要存储的数据
  2. 了解数据的存储特点 是不是时效性的?时效性的话可采用过期清理的方式
  3. 了解数据的生命周期 比如说日志信息 一般建议不存储。如果需要存储的话,建议设置归档和清理规则。
    在此过程中要搞清楚的一些问题首先是数据库中存储的对象是什么?对象(也称实体),实体跟数据库的表、实体跟实体直接的关系大致有一对一、一对多、多对多三种关系。实体所包含的属性有什么?哪些属性或属性的组合可以唯一标识一个实体。

逻辑设计

ER图

逻辑设计是做什么的

  • 将需求转化为数据库的逻辑模型
  • 通过ER图的形式对逻辑模型进行展示
  • 同所选用的具体的DBMS系统无关
    关于ER图常用的名词解释:
    关系:一个关系对应通常所说的一张表。
    元组:表中的一行即为一个元组。
    属性:表中的一列即为一个属性;每一个属性都有一个名称,称为属性名。
    候选码:表中的某个属性组,它可以唯一确定一个元组。
    主码:一个关系有多个候选码,选定其中一个为主码。
    域:属性的取值范围。
    分量:元组中的一个属性值。
    ER图例说明
    矩形:表示实体集,矩形内写实体集的名字。
    菱形:表示关系集。
    椭圆:表示实体的属性。
    线段:将属性连接到实体集,或将实体集连接到联系集。

设计范式概要

对于同一个实体可以有不同的存储方式,就需要一些特定的规范来约束。通过范式可以使得数据库结构清晰、简洁结构明了,避免数据的插入、更新等操作异常及数据冗余。常见的数据库设计范式有第一范式、第二范式、第三范式以及BC范式,重点关注前三个范式。这也是目前大多数数据库设计所要遵循的范式。对于数据操作异常主要包括插入异常、更新异常、删除异常。

数据冗余是指相同的数据在多个地方存在,或者说表中的某个列可以由其他列计算得到,这就说明表中存在数据冗余。

第一范式


每个列不可再分即为第一范式。

第二范式

可以理解为第二范式:就是完全依赖,没有部分依赖。消除了非主属性的传递依赖,即完全依赖于主键。

第三范式

物理设计

数据库物料设计要做什么

  1. 选择合适的数据库管理系统(MySQL、Oracle、SQL Server2012、PgSQL),从特点和成本方面选择合适的数据库管理系统。
  2. 定义数据库、表、字段的命名规范。
  3. 根据所选的DBMS系统选择合适的字段类型,例如 对于字符串的存储设置字段类型,是选择char还是varchar还是text类型?根据实际需求选择
  4. 反范式化设计。是用空间换时间的一种方式,主要是达到高效的读数据目的。

如何选择适合的数据库?

  1. 成本 Oracle和SQLServer是商业软件,基于服务器的核数来收费的。MySQL和PgSQL是常见的开源数据库。
  2. 功能特点:Oracle适合大量的事务性操作。
  3. 系统平台:SQLServer系列企业中常用在Windows服务器中。
  4. 平台的开发语言:Java适合选择Oracle,.NET选择SQLServer系列。PHP选择MySQL。
  5. 应用的场景:Oracle和SQLServer更适合企业级项目。MySQL和PgSQL适合互联网企业。

MySQL常用的存储引擎

存储引擎可以简单理解为不同类型的表。MySQL常用的存储引擎如下:

数据库表及字段的命名规则

  1. 可读性原则
    使用大写和小写来格式化的库对象名字以获得良好的可读性。例如:使用CustomAddress而不是customaddress来提高可读性。(MySQL可以通过设置对表名的大小写是否敏感)
  2. 表意性原则
    对象的名字应该能够描述它所标识的对象。例如,对于表,表的名称应该能够体现表中存储的数据内容;对于存储过程,存储过程名称应该能够体现存储过程的功能。
  3. 长名原则
    尽可能少使用或者不使用缩写,适用于数据库(DATABASE)名之外的任一对象。

数据库字段类型选择原则

列的数据类型一方面影响数据存储空间的开销,另一方面也会影响数据查询性能。当一个列可以选择多种数据类型时,应该优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型。例如,生日可以选择char(10)、varchar(20)、datetime、int等类型。

以上选择原则主要是从以下两个方面考虑的:

  1. 在对数据进行比较(查询条件、JOIN条件及排序)操作时:同样的数据,字符处理往往比数字处理慢。
  2. 在数据库中,数据处理以页为单位,列的长度越小,利于性能提升。本质是优化磁盘IO。

数据库如何选择具体字段类型

数据库设计其他注意事项

反范式化表设计

案例

反范式化设计后

维护优化

数据库维护和优化要做什么

数据库如何维护数据字典

数据库如何维护索引

数据库中适合的操作

数据库表的垂直和水平拆分

原文地址:https://www.cnblogs.com/weblm/p/6279802.html