在理解范例之前,先了解数据库中代码的概念
1 .代码1.1超级代码可以唯一标识包含元组的属性或属性组,而包含超级代码的超集也是超级代码。 这里唯一地识别元组可以简单地通过基于某个字段或若干字段的值查询一行中的特定数据来理解
1.2从候补码超码中选出的最小码,即其真子集不满足条件。 也就是说,不能删除属性。
1.3从主代码候选中选择一个作为主代码。
2 .范例(NF )范式:符合某一种级别的关系模式的集合,简单来说,关于数据库表设计的标准水平,范例有1NF、2NF、3NF、BCNF、4NF等,通常是高级别的范例数据库的设计一般可以到BCNF,有时为了性能也可以做
2.1 1范例(1NF )1范式:关系中的表的属性不可再分割。
举个简单的例子,有学生表。 这些字段如下: sid、sname、address,sid是主键,sname是学生姓名,address是地址。 地址数据可能包括州、城市、街道等。 将来,可能需要单独统计一个城市有多少学生等,但是有必要将这么多信息合并为一个属性。 也就是说,不符合第一范式,属性必须划分为省、城市等多个字段,以满足业务要求。
2.2 2范式(2NF ) 2范式:消除对非主属性代码的部分函数依赖。函数依赖:简单地说,如果每个x属性或属性组都有相应的y值,则y函数依赖于x。 x-y 完全函数依赖:中有x-y,但对于x的任意真子集不存在x’- y称为完全函数依赖。 比如有成绩单。 有几个字段,学校号码,课程和成绩。
(学号,课程) -成绩,任意)! 成绩,(路线)! (成绩为成绩)学号,课程)部分函数依赖:Y函数不完全依赖于x,(与课程名称无关,如学号、课程(-课程名称),即)课程)
2.3 3范式(3NF ) 3范式:消除非主属性对代码的传递函数依赖性的传递函数依赖
关系r(u )、x、y、z是属性集u上的子集,其中存在XY和YZ,但y不确定x,即y! 如果-X的同时y不包含z,则存在XZ。 也就是说,x传递函数决定z,z传递函数依赖于x。
例如,商品表:商品名-仓库、仓库! 商品,仓库-仓库管理员,仓库管理员! -仓库(如果一个仓库有多个管理员) )。
2.4 BCNF范例(BCNF ) BCNF范例:消除主属性之间的间接函数依赖和传递函数依赖。
3 .总结一般来说,我们的数据库最多可以设计3个范例或BCNF范例,但在实际项目中总是在性能和可扩展性上进行取舍。 数据库设计标准越高,可扩展性越高,连接性越低,但性能也越差。 因此,有时也会成为2范式。 为了减少表与表之间的关联并加快查询速度,必须自行比较各种利弊。