mysql-索引、关系、范式

几乎所有的索引都是建立在字段之上

索引:系统根据某种算法,将已有的数据(未来可能新增的数据也算),单独建立一个文件,这个文件能够快速的匹配数据,并且能够快速的找到对应的表中的记录

索引意义

能够大幅度提升查询数据的效率

约束数据的有效性、唯一性等

索引前提

增加索引的前提条件:索引本身会产生索引文件,这个索引文件有可能会比数据文件还大,会比较消耗磁盘空间

如果某个字段需要作为查询条件经常使用,那么可以使用索引,索引根据需求想办法增加

如果某个字段需要进行数据的有效性约束,也可能使用索引(主键约束、唯一键约束)

mysql中提供了很多索引

主键索引:primary key

唯一键索引:unique key

全文索引:fulltext index

普通索引:index

关系

将实体与实体的关系,反应到最终数据库表的设计上,所有的关系都是指表与表之间的关系

关系分为三类:一对一、一对多、多对多

一对一

一张表的一条记录只能与另外一张表的一条记录进行对应,反之亦然

案例

学生表: 包括姓名,性别,年龄,身高,体重,婚姻状况, 籍贯, 家庭住址,紧急联系人这些字段

ID(P) 姓名 性别 年龄 身高 体重 婚姻状况 籍贯 家庭住址 紧急联系人
1                    
2                    

表设计成以上这种形式: 符合要求. 其中姓名,性别,年龄,身高,体重属于常用数据; 但是婚姻,籍贯,住址和联系人属于不常用数据. 如果每次查询都是查询所有数据,不常用的数据就会影响效率, 实际又不用.

解决方案

将常用的和不常用的信息分离存储,分成两张表

常用信息表:姓名,性别,年龄,身高,体重

ID(P) 姓名 性别 年龄 身高 体重
1            
2            

不常用信息表:保证不常用信息与常用信息一定能够对应上: 找一个具有唯一性(确定记录)的字段来共同连接两张表

ID(P) 婚姻状况 籍贯 家庭住址 紧急联系人
1          
2          

总结:一个常用表中的一条记录: 永远只能在一张不常用表中匹配一条记录;反过来,一个不常用表中的一条记录在常用表中也只能匹配一条记录: 一对一的关系

一对多

一张表中有一条记录可以对应另外一张表中的多条记录; 但是返回过, 另外一张表的一条记录只能对应第一张表的一条记录. 这种关系就是一对多或者多对一

案例

母亲与孩子的关系: 母亲,孩子两个实体

母亲和孩子两个实际之间的关系: 一个妈妈可以在孩子表中找到多条记录(也有可能是一条); 但是一个孩子只能找到一个妈妈: 是一种典型的一对多的关系.

母亲表

[ ] ID(p) 名字 年龄
1        
2        

孩子表

[ ] ID(p) 名字 年龄
1        
2        

这种设计解决了实体的设计表问题, 但是没有解决关系问题: 孩子找不出妈,妈也找不到孩子

解决方案

在某一张表中增加一个字段,能够找到另外一张表的中记录: 应该在孩子表中增加一个字段指向妈妈表: 因为孩子表的记录只能匹配到一条妈妈表的记录

修改孩子表,母亲表不变

ID(P) 姓名 年龄 性别 母亲ID
1         母亲表主键  
2         母亲表主键  

多对多

一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录; 同时B表中的一条记录也能对应A表中的多条记录: 多对多的关系

案例

老师和学生

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdzpz.html