zoukankan      html  css  js  c++  java
  • 数据库设计笔记

    需求分析

    数据库设计简介

    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。

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

    数据库设计其他注意事项

    反范式化表设计

    案例

    反范式化设计后

    维护优化

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

    数据库如何维护数据字典

    数据库如何维护索引

    数据库中适合的操作

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

  • 相关阅读:
    [问题2014S12] 复旦高等代数II(13级)每周一题(第十二教学周)
    [问题2014S09] 解答
    [问题2014S11] 复旦高等代数II(13级)每周一题(第十一教学周)
    [问题2014S08] 解答
    [问题2014S10] 复旦高等代数II(13级)每周一题(第十教学周)
    [问题2014S07] 解答
    [问题2014S09] 复旦高等代数II(13级)每周一题(第九教学周)
    [问题2014S08] 复旦高等代数II(13级)每周一题(第八教学周)
    怎么解决tomcat占用8080端口问题图文教程
    MySQL中删除重复数据只保留一条
  • 原文地址:https://www.cnblogs.com/weblm/p/6279802.html
Copyright © 2011-2022 走看看