一、索引
所有的索引都是建立在字段上的
索引的作用
系统根据某种算法,将已有数据(未来可能增加的数据),单独建立一个文件: 文件能够实现快速的匹配数据,并且能够快速的找到对应表中的记录
索引的意义:
- 提升查询数据的效率
- 约束数据的有效性(唯一性等)
增加索引的前提条件:索引本身会产生索引文件(有时候有可能比数据还大),会耗费磁盘空间。
如果某个字段需要作为查询的条件经常使用,可以使用索引。
如果某个字段需要进行数据的有效性约束,也可以使用索引(eg:主键,唯一键)
MySQL中的索引:
1、主键索引:primary key
2、普通索引:unique key
3、全文索引:fulltext index
4、普通索引:index
全文索引:针对文章内部的关键字进行索引(弊端:如何确定关键字)
二、关系
将实体与实体的关系,反应到最终数据库表的设计上,表与表之间的关系;将关系分为以下几种:
- 一对一
- 一对多(多对一)
- 多对多
1、一对一
一张表的一条记录只能与另一张表的一条记录进行对应
eg:将常用的和不常用的信息分离存储,分为两张表,找一个具有唯一特性(确定记录)的字段来共同链接两张表。一个常用表中的一条记录:永远只能在一张不常用表中匹配一条记录;反过来,一个不常用表中的一条记录在常用表中也只能匹配一条记录
2、一对多(多对一)
一张表中有一条记录可以对应另外一张表中的多余记录;但是,另一张表的一条记录只能对应第一张表的一条记录
eg:在某一张表中增加一个字段,能够找到另外一张表中的记录
3、多对多
一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录也能对应A表中的多条记录
一张表中的多条记录对应另一张表中的多条记录:增加一张中间表,使两张表形成联系。中间表分别与两张表为一对多的关系。
三、范式(Normal Format)
是一种离散数学中的知识,是为了解决一种数据的储存与优化的问题:保存数据的存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储:目的是为了解决数据的冗余
范式:是一种分层结构的规范,分为六层:每一层都比上一层更加严格:若要满足下一层范式,前提是满足上一层范式
六层范式:1NF,2NF,3NF,4NF,5NF,6NF。1NF是最底层;6FN是最高层,最严格。
而MySQL属于关系型数据库:有空间浪费,因此也是为了于节省存储空间,与范式所要解决的问题相同,所以在设计数据库的时候,会利用到范式来指导设计。
但是由于数据库不仅仅解决的是空间问题,要保证效率,所以数据库的设计不可能完全按照范式的要求实现;一般情况下,只有前三种范式需要满足。
1NF:第一范式,要求字段的数据具有原子性——不可再分
在设计表存储数据的时候, 如果表中设计的字段存储的数据,在取出来使用之前还需要额外的处理(拆分), 那么说表的设计不满足第一范式
2NF:第二范式,要求表中不允许出现部分依赖。要想满足第二范式,就要满足第一范式
在数据设计过程中,如果有复合主键(多字段主键), 字段并不是由整个主键来确定,而是依赖主键中的某个字段(主键的部分); 存在字段依赖主键的部分的问题,称之为部分依赖
3NF:第三范式,解决传递依赖。要满足第三范式就要满足第二范式
理论上讲,一张表中的所有字段都应该直接以来主键,如果表设计中存在的一个字段, 并不直接依赖主键,而是通过某个非主键字段依赖,最终实现依赖主键 把这种不是直接依赖主键,而是依赖非主键字段的依赖关系称之为传递依赖
逆规范化:在设计表的时候,如果一张表中有几个字段是需要从另外的表中去获取信息,但是效率低,如果在某些表中,不去保存另外表的主键,而是直接保存想要的数据信息,这样,在查询数据的时候,一张表可以直接提供数据,就不需要多表查询。会导致数据冗余。
网友评论