数据库是每个程序员都必须要掌握的知识结构,Android中也同样如此,今天的三问就是关于数据库的:
数据库索引,是数据库管理系统中一个排序的数据结构
,以协助快速查询,更新数据库中表的数据.索引的实现通常使用B树和变种的B+树
(mysql常用的索引就是B+树)
优点
提高系统的性能
唯一性
分组和排序的时间
缺点
耗费时间
,而且时间随着数据量的增加而增大空间会更大
耗费较多的时间
,因为索引也要动态地维护数据库事务必须具备ACID
特性,ACID是 Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性) 的英文缩写。
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚
到事务开始前的状态,就像这个事务从来没有执行过一样。
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态
。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间
。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来
。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
范式的英文名称是Normal Form
,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型
后总结出来的。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)
。
第一范式
就是属性不可分割
,每个字段都应该是不可再拆分的。比如一个字段是姓名(NAME),在国内的话通常理解都是姓名是一个不可再拆分的单位,这时候就符合第一范式;但是在国外的话还要分为FIRST NAME和LAST NAME,这时候姓名这个字段就是还可以拆分为更小的单位的字段,就不符合第一范式了。第二范式
就是要求表中要有主键,表中其他其他字段都依赖于主键,因此第二范式只要记住主键约束
就好了。比如说有一个表是学生表,学生表中有一个值唯一的字段学号,那么学生表中的其他所有字段都可以根据这个学号字段去获取,依赖主键的意思也就是相关的意思,因为学号的值是唯一的,因此就不会造成存储的信息对不上的问题,即学生001的姓名不会存到学生002那里去。第三范式
就是要求表中不能有其他表中存在的、存储相同信息的字段,通常实现是在通过外键去建立关联,因此第三范式只要记住外键约束
就好了。比如说有一个表是学生表,学生表中有学号,姓名等字段,那如果要把他的系编号,系主任,系主任也存到这个学生表中,那就会造成数据大量的冗余,一是这些信息在系信息表中已存在,二是系中有1000个学生的话这些信息就要存1000遍。因此第三范式的做法是在学生表中增加一个系编号的字段(外键),与系信息表做关联。