惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园 - 叶小钗
Jina AI
Jina AI
博客园 - 司徒正美
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
量子位
MyScale Blog
MyScale Blog
V
Visual Studio Blog
博客园 - 聂微东
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
小众软件
小众软件
宝玉的分享
宝玉的分享

博客园 - 释天

4年后新的开始 flash make things move 电子书 破解pubwin ep html学习笔记(-) js学习笔记(-) - 释天 - 博客园 flex2注册码 Flex2.0和C#间的通信[转] - 释天 - 博客园 flash与.net的联合开发(c#,c++)请大家讨论一下 flash中三维动画学习(关于类) flash中一个二维的类 经典言论 c#解答题参考答案 [求教]vs2005下关于css的问题 一个关于文件操作的类(功能还是有点弱) 写了个烂代码,请原谅 C#中接口(interface)的理解 赠送gmail邀请 Gridview的使用 iframe的使用
三个范式的解释
释天 · 2006-09-21 · via 博客园 - 释天

第一范式[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表中。