关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到几范式来评价模式规范化的程度。
1 N F 1NF 1NF(第一范式) 定义:若关系模式 R R R的每一个分量是不可再分的数据项,则关系模式 R R R属于第一范式。例如,供应者和它所提供的零件信息,关系模式FIRST和函数依赖集 F F F如下: F I R S T ( S n o , S n a m e , S t a t u s , C i t y , P n o , Q t y ) FIRST(Sno, Sname, Status, City, Pno, Qty) FIRST(Sno,Sname,Status,City,Pno,Qty) F = S n o → S n a m e , S n o → S t a t u s , S t a t u s → C i t y , ( S n o , P n o ) → Q t y F={Sno\rightarrow{Sname}, Sno\rightarrow{Status}, Status \rightarrow{City}, (Sno, Pno) \rightarrow{Qty}} F=Sno→Sname,Sno→Status,Status→City,(Sno,Pno)→Qty
SnoSnameStatusCityPnoQtyS1精益20天津P1200S1精益20天津P2300S1精益20天津P3480S2盛锡10天津P2168S2盛锡10北京P3500S3东方红30北京P1300S3东方红30北京P2280S4泰达40上海P2460从表中可看出1NF存在4个问题:
冗余度大。引起修改操作的不一致性。插入异常。删除异常。换句话说,当 1 N F 1NF 1NF消除了非主属性对码的部分函数依赖,则称为 2 N F 2NF 2NF。
例如,FIRST关系中的码是 S n o , P n o Sno, Pno Sno,Pno,而 S n o → S t a t u s Sno \rightarrow{Status} Sno→Status,因此非主属性 S t a t u s Status Status部分函数依赖于码,故非2NF的。
若此时将FIRST关系分解为 F I R S T 1 ( S n o , S n a m e , S t a t u s , C i t y ) FIRST1(Sno, Sname, Status, City) FIRST1(Sno,Sname,Status,City)和 F I R S T 2 ( S n o , P n o , Q t y ) 。 其 中 FIRST2(Sno, Pno, Qty)。其中 FIRST2(Sno,Pno,Qty)。其中 F I R S T ∈ 2 N F , F I R S T 2 ∈ 2 N F FIRST∈2NF, FIRST2∈2NF FIRST∈2NF,FIRST2∈2NF。
即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。