zoukankan      html  css  js  c++  java
  • 如何设计出好的数据库

    首先来讲讲三个数据库的三个范式

    三个范式:

    ​ 第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。1NF是所有关系型数据库的最基本要求。

    ​ 第二范式(2NF):在第一范式的基础上,消除非主属性对码的部分函数依赖。可以理解为要有主键,要求其他字段都依赖于主键。

    ​ 第三范式(3NF):在第二范式的基础上,消除了非主属性对于码的传递函数依赖。消除传递依赖,可以看做是“消除冗余”,消除冗余应该比较好理解一些,就是各种信息只在一个地方存储,不出现在多张表中。非主键外的所有字段必须互不依赖

    结论:如果符合第三范式要求的数据库设计,基本上就解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF,但是作为数据库设计人员,至少应该知道,3NF的要求是怎样的。

    数据库优化:

    • 设计表的时候,适度冗余字段,减少join操作
    • 选择恰当的数据类型,比如自定义类型
    • 对于一些比较频繁的作为查询条件的字段建立索引,唯一性太差的字段不适合创建索引。
    • 开启慢查询日志找出效率低下的SQL语句进行优化。
    • 设计表的时候,所有表和字段都添加相应的注释:
    • 设计数据库表时,加上三个字段: 主键、create_time、update_time
    • 主键一定要加上的,没有主键的表示没有灵魂的,创建时间和更新时间对详细审计和跟踪记录都是有用的。
    • 尽量把所有列定义为NOT NULL
    • 所有表尽量InnoDB引擎,Innodb 「支持事务,支持行级锁,更好的恢复性」,高并发下性能更好,所以呢,没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎。
    • 多字段表可以进行垂直分表优化,多数据表可以进行水平分表优化

    垂直分表

    • 常用的字段放在一个表中
    • 不常用的字段放在另一个表中
    • 数据类型占用空间比较大的值也单独放表

    水平分表

    • 把一个id在一个范围之内(0-1000w,1000w-2000w)的分给一张表。缺点是:最早使用的数据库表的活跃用户比较低,就可能浪费数据库的使用空间
    • 按余数分,要事先估算这个表n年之后,最大能存多少数据。按id划分,比如分成3个表就把id/3分别存储。缺点是:估算要创建多少表。(小公司)
  • 相关阅读:
    css3转换
    JavaScript函数
    JavaScript数组
    JavaScript流程控制
    JavaScript数据类型、运算
    css3响应布局
    css3渐变、背景、过渡、分页
    css3初识
    CSS3选择器
    H5拖拽、绘画、web存储
  • 原文地址:https://www.cnblogs.com/lance-lzj/p/14033431.html
Copyright © 2011-2022 走看看