博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库设计笔记
阅读量:5312 次
发布时间:2019-06-14

本文共 2541 字,大约阅读时间需要 8 分钟。

需求分析

数据库设计简介

  1. 什么是数据库设计?
    简单来说,数据库设计就是根据业务系统的具体需要结合我们所选用的DBMS(数据库管理系统),为这个业务系统构造出最优的数据存储模型。并建立好数据库中的表结构及表与表之间的关联关系的过程。使之能有效的对应用系统中的数据进行存储,并可以高效的对已经存储的数据进行访问。重点在于有效的数据存储和高效的对数据进行访问
  2. 为什么要进行数据库设计?

    刚开始未对数据库进行有效的设计,在后期业务逻辑复杂的时候往往会暴露出很多问题。
    优良的设计 糟糕的设计
    减少数据冗余 存在大量数据冗余
    避免数据维护异常 存在数据插入、更新、删除异常
    节约存储空间 浪费大量存储空间
    高效的访问 访问数据低效

    数据库设计的步骤

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

    需求分析重要性简介

    为什么要进行需求分析?
  1. 了解系统中所要存储的数据
  2. 了解数据的存储特点 是不是时效性的?时效性的话可采用过期清理的方式
  3. 了解数据的生命周期 比如说日志信息 一般建议不存储。如果需要存储的话,建议设置归档和清理规则。

    在此过程中要搞清楚的一些问题首先是数据库中存储的对象是什么?对象(也称实体),实体跟数据库的表、实体跟实体直接的关系大致有一对一、一对多、多对多三种关系。实体所包含的属性有什么?哪些属性或属性的组合可以唯一标识一个实体。

    逻辑设计

    ER图

    逻辑设计是做什么的
  • 将需求转化为数据库的逻辑模型
  • 通过ER图的形式对逻辑模型进行展示
  • 同所选用的具体的DBMS系统无关

    关于ER图常用的名词解释:
    关系:一个关系对应通常所说的一张表。
    元组:表中的一行即为一个元组。
    属性:表中的一列即为一个属性;每一个属性都有一个名称,称为属性名。
    候选码:表中的某个属性组,它可以唯一确定一个元组。
    主码:一个关系有多个候选码,选定其中一个为主码。
    域:属性的取值范围。
    分量:元组中的一个属性值。
    ER图例说明
    矩形:表示实体集,矩形内写实体集的名字。
    菱形:表示关系集。
    椭圆:表示实体的属性。
    线段:将属性连接到实体集,或将实体集连接到联系集。
    743630-20170112214455916-881566205.png

    设计范式概要

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

    743630-20170112221307197-1648474787.png

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

第一范式

743630-20170112221712072-1173255915.png

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

第二范式

743630-20170112222436056-346922154.png

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

第三范式

743630-20170112223025135-596437845.png

743630-20170112223128650-821186381.png

743630-20170112223208775-1221420038.png

743630-20170112223413775-1339610578.png

物理设计

数据库物料设计要做什么

  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常用的存储引擎如下:

743630-20170113223104572-122388581.png

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

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

    尽可能少使用或者不使用缩写,适用于数据库(DATABASE)名之外的任一对象。

    数据库字段类型选择原则

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

    743630-20170113225352010-1192574861.png

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

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

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

743630-20170113230117494-1611502526.png

743630-20170113230506791-2649402.png

743630-20170113230526244-768334600.png

数据库设计其他注意事项

743630-20170113230903244-1888269103.png

743630-20170113231145588-757733722.png

743630-20170113231231103-1828717740.png

743630-20170113231334494-534794005.png

反范式化表设计

743630-20170113231607306-993149074.png

案例

743630-20170113231718088-1283268562.png

743630-20170113231758072-95172764.png

743630-20170113231829103-313427695.png

反范式化设计后

743630-20170113231919228-1353852404.png

743630-20170113232042431-1719340364.png

743630-20170113232058697-384941560.png

743630-20170113232230072-600236303.png

维护优化

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

743630-20170113232606963-566660240.png

数据库如何维护数据字典

743630-20170113233259322-211230338.png

743630-20170113233320916-479267567.png

数据库如何维护索引

743630-20170113233546041-983314596.png

743630-20170113233953463-155713039.png

数据库中适合的操作

743630-20170113234605166-2044032549.png

743630-20170113234620025-1445508790.png

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

743630-20170113235253181-93607770.png

743630-20170113235308244-1334612460.png

转载于:https://www.cnblogs.com/weblm/p/6279802.html

你可能感兴趣的文章
利用GDAL实现影像的几何校正
查看>>
不错的iOS相关的主页或站点 (更新于14-06-22)
查看>>
联想集团大裁员:“公司不是家” 和 “柳传志的回应”(
查看>>
less嵌套规则
查看>>
【转】深入浅出ShellExecute
查看>>
常见ES5方法
查看>>
缓存,队列(Redis,RabbitMQ)
查看>>
破解Java to C# Converter
查看>>
如何把win10自带输入法改为简体中文
查看>>
【codeforces 534B】Covered Path
查看>>
python的匿名函数
查看>>
WPF QQ群发助手
查看>>
Django基础三之视图函数
查看>>
php oracle数据库NCOLB字段ORA-01704
查看>>
英语词汇—V01
查看>>
java关闭资源,自制关闭资源工具类
查看>>
计算机网络专题
查看>>
poj3641(学习了)
查看>>
java连接mysql底层封装
查看>>
jmeter添加自定义扩展函数之DoubleSum
查看>>