• 数据库设计经验总结


    数据库设计的范式

        1NF 属性不可分割
        2NF 没有部分依赖
        3NF 没有传递依赖

    反规范化设计

    反规范化设计的前提
    反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。

    反规范化设计的优点
    能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。

    反规范化设计的缺点
    反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。

    反规范化设计的方法
    增加冗余列
    增加派生列
    表合并
    表分割
    水平分割
    建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
    水平分割应用的几种情况:
    表记录数很多
    表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
    表内容需要存储在多个介质上
    垂直分割
    把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
    比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。

    反规范设计的数据维护
    反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
    应用逻辑
    在应用程序的事务中对同一数据的多处存储进行维护。
    这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
    批处理维护
    由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
    触发器
    在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。

    扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)

    两个陷阱的解释  

    设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。

  • 相关阅读:
    计算机注销、热启动、冷启动
    从高处理解android与服务器交互(看懂了做开发就会非常的容易)
    Android—Work—1day
    软件需求分析方法
    Android 常用控件的介绍
    android中Json的一些应用
    java数据传递例子+内存分析
    android中MVP模式
    android的四层体系结构,基于mvc三层结构浅析
    java
  • 原文地址:https://www.cnblogs.com/no7dw/p/1718253.html
Copyright © 2020-2023  润新知