几乎所有的索引都是建立在字段之上
索引:系统根据某种算法,将已有的数据(未来可能新增的数据也算),单独建立一个文件,这个文件能够快速的匹配数据,并且能够快速的找到对应的表中的记录
索引意义能够大幅度提升查询数据的效率
约束数据的有效性、唯一性等
索引前提增加索引的前提条件:索引本身会产生索引文件,这个索引文件有可能会比数据文件还大,会比较消耗磁盘空间
如果某个字段需要作为查询条件经常使用,那么可以使用索引,索引根据需求想办法增加
如果某个字段需要进行数据的有效性约束,也可能使用索引(主键约束、唯一键约束)
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) 姓名 年龄 性别 母亲ID1 母亲表主键
2 母亲表主键
多对多
一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录; 同时B表中的一条记录也能对应A表中的多条记录: 多对多的关系
案例
老师和学生