第一范式:对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性.
(第一范式是通过把重复的组放到每个独立的表中,把这些表通过一对多关联联系起来这种方式来消除重复组的)
第二范式:第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。
一旦创建,主键无法改变,外键关联一个表的主键。主外键关联意味着一对多的关系.(第二范式处理冗余数据的删除问题。
当某张表中的信息依赖于该表中其它的不是主键部分的列的时候,通常会违反第二范式)
第三范式:第三范式要求非主键列互不依赖.(第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。
我们为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键)
第四范式:第四范式禁止主键列和非主键列一对多关系不受约束
第五范式:第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余
索引是对数据库表中一个或多个列的值进行排序的一种特殊数据结构,以协助快速查询,可以用来查询数据库表中特定的记录,索引是提高数据库性能的重要方式,所有字段都可添加,一般添加到使用频率高的字段。
索引的实现通常使用B_TREE及其变种。索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。
CREATE[UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name{column_name...}[WITH FILLFACTOR=x],
FILLFACTOR表示填充因子,定义该索引每页上的空间量,0--100.
-------------------------------------
alter table 表名 add index 索引名(要添加索引字段名)
create index 索引名 on 表名(要添加的字段名)
(1)alter table 表名 drop index 索引名 。
(2)drop index 索引名 on 表名。
在数据结构中,我们最为常见的搜索结构就是二叉搜索树和AVL树(高度平衡的二叉搜索树,为了提高二叉搜索树的效率,减少树的平均搜索长度)了。然而,无论二叉搜索树还是AVL树,当数据量比较大时,都会由于树的深度过大而造成I/O读写过于频繁,进而导致查询效率低下,因此对于索引而言,多叉树结构成为不二选择。特别地,B-Tree的各种操作能使B树保持较低的高度,从而保证高效的查找效率。