`
- 浏览:
415331 次
- 性别:
- 来自:
深圳
-
第一范式[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表中。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
【SQL三个范式详解】 SQL三个范式是数据库设计中重要的理论基础,它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。这些范式确保了数据库的规范化,避免数据冗余和操作异常,从而提高数据的完整性和...
关系数据库三个范式理解实例,举例,20个字补丁
"数据库的三个范式" 数据库规范化是数据库设计的核心概念,它是指将数据库设计成一个高效、可靠、易维护的系统。三个范式是数据库规范化的基本概念,它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)...
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,...第三范式:在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。
主要的范式有三个,即第一范式(1NF)、第二范式(2NF)和第三范式(3NF),还有更高层次的鲍依斯-科得范式(BCNF)。这些范式的目标是减少数据冗余,避免数据更新时出现异常,如插入异常、删除异常和更新异常。 第...
简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键字段。就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放。 通俗解释就是一张表最多只存两层同类型信息。...
数据库三个范式的理解 数据库设计中的规范要求是指在设计关系型数据库时需要遵从的规则和原则,这些规则和原则被称作范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德...
BCNF(巴斯-科德范式)是比3NF更严格的一个范式,它要求关系模式中所有属性(包括主属性和非主属性)都不传递依赖于任何候选关键字。例如,配件管理关系模式WPE中,(WNO,PNO)是一个候选关键字,(WNO,PNO)决定...
MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其设计遵循了数据库理论中的核心原则——范式。...因此,理解并灵活运用MySQL数据库中的三大范式是每个数据库设计者和管理员必备的技能。
BCNF是对第三范式的一个扩展,它进一步要求对于表中的每一个非平凡函数依赖,其左边必须包含候选键。这意味着除了要求满足第三范式之外,还要求所有的函数依赖都包含在候选键中。 例如,考虑一个包含学生ID、课程ID...
关系数据库设计之时是要遵守一定的规则的。尤其是数据库设计范式 现简单介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四... 在你设计数据库之时,若能符合这几个范式,你就是数据库设计的高手
在深入探讨数据库范式之前,我们需要先了解几个基础概念。 ##### 实体(Entity) 实体是指现实世界中客观存在的、可以被区别的事物。例如:“一个学生”、“一本书”、“一门课程”等。需要注意的是,这里的“事物”...
简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那麼在员工信息表中列出部门...
在 Java 面试中,数据库三范式是常见的考察点,本文将对三范式进行详细的解释,并以实例来讲解怎样将这些范式应用于实际工程。 一、第一范式(1NF) 第一范式的定义是:关系 R 中的每个属性都是不可分割的项。也...
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
数据库设计是信息系统构建的核心环节,其中的三大范式——第一范式、第二范式和第三范式,是确保数据规范化和避免数据冗余的关键原则。这些范式是根据关系数据库理论建立的,目的是提高数据库的逻辑独立性和减少数据...