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

    第一.数据库优化包括哪些方面

    数据库优化是一个综合型的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使的数据库提高很多
    主要包括:
    1.表的设计合理化(三范式)
    2.给表要添加合适的索引
    3.分表技术(水平分割、垂直分割)
    4.定时清除垃圾数据,定时进行碎片整理
    5.对mysql的配置进行一些优化
    6.读写分离

    第二.数据库的设计

    2.1好数据库和糟糕数据库的对比

    良好的数据库:
    1.节省存储空间
    2.保证数据完整性
    糟糕的数据库
    1.数据冗余,存储空间的浪费
    2.产生数据不完整

    2.2 设计数据库的步骤

    2.2.1充分了解需求

    2.2.2标识实体:具体存在的对象,名词

    对象如下

    用户

    发帖

    回帖

    版块

    2.2.3标识属性

    2.2.4.标识关系

    一对多:主键和非主键之间的关系,在多的一方创建一个字段作为外键指向一的一方的主键
    多对多:创建一个第三种表,中间表至少需要2个字段分别作为外键指向多对多双方的各自主键
    一对一:
    唯一外键对应:假设一对一的双方是一对多的关系,在多的一方创建外键指向一的一方的主键,需要在外键
    上添加一个unique约束
    主键对应:将一对一的双方的主键建立映射

     2.3数据库规范化

    表设计出来以后,并不是合理的结构,我们需要对表进行规范化(我们通过3范式来对表进行规范化)

    2.3.1 第一范式(确保每列的原子性)

    第一范式用来规范所有的字段,所有的字段都不可再分,两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
    注意:比如地址这个字段,如果不分类汇总,不排序,仅仅是起一个字符串的作用,这时我们不拆分

    上图所示的用户信息遵循第一范式的要求,这样对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

    2.3.2第二范式非主键字段必须依赖与主键字段,每个表只描述一件事

    第二范式需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

    也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

    比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下图。

    这里产生一个问题:这个表中是以订单编号和商品编号作为联合主键,这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,

    而仅仅是与商品的编号相关,所以在这里违反了第二范式的设计原则。

    而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了,如下图。

     这里这样设计,在很大程度上减小了数据库的冗余,如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

     2.3.3第三范式消除传递依赖

    在非主键字段中,如果一个字段可以推导出另外一个字段

    比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系,而不可以在订单表中添加关于客户其他信息(比如姓名、所属公司)的字段,

    如下面这两个表所示的设计就是一个满足第三范式的数据库表。

    这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必再订单信息表中多次输入客户信息的内容,减小了数据冗余。

    2.3.4反三范式

    没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,

    适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,

    达到以空间换时间的目的

    2.3.5规范化和性能

    1.数据库性能和规范化数据库更重要

    通过在给定的表中添加额外的字段,以减少需要从中搜索信息所需要的时间
    通过在给定的表中插入计算列(查询总分),以方便查询

    2进行规范化的同时,还需要综合考虑数据库性能

    2.3.6范式化设计和反范式化设计的优缺点

    1.范式化

    优点

    缺点

    2.反范式化

    优点

    缺点

     

  • 相关阅读:
    综合:bool类型 命名空间 输入输出
    C++命名空间
    C++输入输出
    C++新特性
    C++ IDE环境
    C++简介
    3 python3 编码解码问题 upd接受数据
    2 socket UDP通信
    1 网络基础知识
    15 GIL 全局解释器锁 C语言解决 top ps
  • 原文地址:https://www.cnblogs.com/cxyyh/p/11148991.html
Copyright © 2011-2022 走看看