数据库泛型
数据库泛型也称为范式,也就是数据库应该遵循的规则。目前关系数据库最常用的4种方式分别是第一范式,第二范式,第三范式,BCN范式。这里我们来依次看一下:
第一范式
第一范式的要求就是表中不能有重复字段,并且每个字段不能拆分。在设计数据库的时候,数据库需要满足的最低要求就是第一范式,如果一个数据库连第一范式都不能满足的话,那就是不能称之为关系数据库了。只有满足了第一范式的要求,才可以在这个关系数据库中创建表。
第二范式
第二范式的要求数据库表中的每个实例或行必须可以被惟一地区分。也就是说单一主键来标记整条记录,不要出现多个主键。这里举个例子,比如说一个学生表中有学号,院系号,院系名这3个字段,因为学号可以决定院系名,院系号也可以决定院系名,也就是说这里拥有了2个主键。
现在对该表进行细化,细化之后应该生成两个表,第一个表中有学号,院系号这2个字段,第二个表中有院系号,院系名这2个字段,这样就满足了第二范式的要求。
技巧:
第二范式要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。注意:
通常情况下,如果一个数据库能够满足第三范式的要求,那么则个数据库就是一个很好的数据库了。当一个数据库达到第三范式的要求时,这时数据库中基本就没有冗余的内容了。但是有时为了满足查询速度等要求,可以有意识的让某些表有些冗余。这是为了提高整个数据库的性能。
BCN范式
在1NF基础上,任何非主属性不能对主键子集依赖[在3NF基础上消除对主码子集的依赖]巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。
对于BCNF,在主码的任何一个真子集都不能决定于主属性。关系中U主码,若U中的任何一个真子集X都不能决定于主属性Y,则该设计规范属性BCNF。例如:在关系R中,U为主码,A