《标准化第三范式》由会员分享,可在线阅读,更多相关《标准化第三范式(3页珍藏版)》请在金锄头文库上搜索。
1、第二氾式第三范式(3NF)是数据库规范化中所使用的一种正规形式,用来检验是否所有非键属性都只和候选键有相关性,也就是说所有非键属性互相之间应该是无关的。第三范式和第二范式不同的地方在于,在第三范式里,所有的非键属性都必须和每个候选键有直接相关。如果再对第三范式做进一步加强就成了范式,它所强调的重点就在于数据间的关系是奠基在键上、以整个键为考量、而且除了键之外不考虑其他因素。以下面这个定义机械组件的关系为例:机械组件组件编号(主键)制造商名称制造商地址1000ToyotaParkAvenue1001MitsubishiLincolnStreet1002ToyotaParkAvenue本例中制造商
2、地址很明显地不该被列在这个关系里面,因为和组件本身比起来,制造商地址应该和制造商比较有关系;正确的做法应该是把独立成为一个新的数据表:制造商制造商名称(主键)制造商地址ToyotaParkAvenueMitsubishiLincolnStreet然后把原本的数据表改成这样:机械组件组件编号制造商名称(主键)1000Toyota1001Mitsubishi1002Toyota先前那个数据表的问题在于每提到一次制造商名称就要多存一次它的地址,而这就不符合第三范式的原则。下面提供了另一个例子:订单(Order)订单编号(OrderNumber)(主键)客户名称(CustomerName)单价(Uni
3、tPrice)数量(Quantity)小计(Total)1000David$35.003$105.001001Jim$25.002$50.001002Bob$25.003$75.00在本例中,非主键字段完全依赖于主键订单编号,也就是说唯一的订单编号能导出唯一非主键字段值,符合第二范式。第三范式要求非主键字段之间不能有依赖关系,显然本例中小计依赖于非主键字段单价和数量,不符合第三范式。小计不应该放在这个数据表里面,只要把单价乘上数量就可以得到小计了;如果想要符合第三范式的话,就把小计拿掉吧(不过在做查询的时候,本来用SELECTOrders.TotalFROMOrder就要改成用SELECTUnitPrice*QuantityFROMOrder了)。订单(Order)订单编号(OrderNumber)(主键)客户名称(CustomerName)单价(UnitPrice)数量(Quantity)1000David$35.0031001Jim$25.0021002Bob$25.003