第一范式[1NF]
定义:仅当所有基本的简单域只包含原子数值,具有这种关系的被认为符合第一范式。
使用更加实际可用的术语来定义第一范式。实际可以分为2部分。第一部分就是字段中的任何值都必须是原子的。不符合第一范式一个例表如下
ID suppler_products price
-------------------------------------------------
1 lenox serving platter 156.95
2 mikasa serving platter 93.95
3 noritake serving platter 206.95
因为suppler_products字段中的值包括2个不同得数据元素:供应商以及他们所供应得产品。我们需要采取下面的步骤来解决这个问题:
ID serving platter lenoxprice mikasaprice noritakeprice
---------------------------------------------------------------------------------------------------
1 serving platter 156.95 93.95 206.95
但是这个解决办法又违反第一范式的第二部分,要求原子值不能在不同的字段中分散出现,在这种情况下,价格就是一个原子值,但是我们已经把它分散到三个部分中。最后我们可以采取下面的方法使其满足第一范式得要求:
products
ID Name
-------------
1 servingplatter
suppliers
ID ProductID Name Price
-------------------------------------------------
1 1 lenux 156.95
2 1 mikasa 93.95
3 1 noritake 206.95
分别创建两个单独得表,现在我们就由了一个具有原子数据得price字段:价格。
第二范式[2NF]
定义:当且仅当满足第一范式,而且每一个非关键属性都完全依赖与其主关键码,具有这种关系的被认为符合第二范式。
检验上products表,我们发现它满足第二范式。其键码是ID,因此唯一的非关系属性是Name。Name完全依赖于用来识别不同产品的ID字段。
如果我们来看suppliers表,会发现它不满足2NF.而且,Name完全依赖于ID字段,因为后者是用来识别不同供应商的键码字段。不过,非键码得ProductID和Price字段都不完全依赖与ID字段,比方说并不是所有得Lenux产品的价格都是156.95元。我们需要添加第三个表以满足2NF并且要保留各表之间的关系和数据:
products
ID NAME
--------------
1 serving platter
suppliers
ID Name
--------------------
1 lenux
2 mikasa
3 noritake
products_suppliers
productID supplierID price
-------------------------------------------
1 1 156.95
1 2 93.95
1 3 206.95
这里,products表与上一个products表相同。products.name仍然完全依赖于products.ID,因此它满足2NF。suppliers现在也满足2NF,因为它具有一个键码字段和一个完全依赖于它的非键码字段。products_suppliers具有一个productID和supplierID字段组成的组合键码。唯一得非键码字段是price,并且完全依赖于键码。
第三范式[3NF]
定义:当且仅当满足第二范式,而且每一个非关键属性都非传递依赖与其关键码,具有这种关系的被认为符合第三范式。
现在为该例添加供应商得电话号码,如下:
products_suppliers
productID supplierID price supplierphone
----------------------------------------------------------------
1 1 156.95 3013344
1 2 93.95 3024455
1 3 206.95 3035566
现在该表还满足1NF,因为它所有字段都是原子的。该表还满足2NF,price和supplierphone字段都依赖与键码。但它不再满足3NF。supplierphone字段还依赖于键码,但仅仅是部分依赖。也就是说,它依赖与键码的supplierID字段部分而不是productID字段部分。该解决方案应该非常明显:我们需要吧supplierphone字段从products_suppliers表重转移到suppliers表中。
转载于:https://www.cnblogs.com/kttt/archive/2006/09/21/511288.html