3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/3358 www.Sina.com.Sina.com/http://ww.Sina.com
2 .尽量合并两列属性相近或相似或相同且属性相同的列,以避免生成冗馀数据
例如:
有一个学生代表。 假设两个字段分别为name、address,地址的内容写为江苏省南京市浦口区xxx街xxx小区。 此时,如果来了一个需求,需要按省市区分类,显然不符合需求。 这样的表结构也并不符合第一范式。
应该像name、province、city、area、address那样设计
2 .第二范式(2NF )属性完全依赖于主键
第二范式(2NF )基于第一范式) 1NF )构建,即要满足第二范式(2NF )必须首先满足第一范式) 1NF )。
第二正则表达式(2NF )必须能够唯一区分数据库表中的每个实例或行。 为了实现区分,通常需要向表中添加列以存储每个实例的唯一标识符。 这个唯一的属性列被称为主键
每行的数据只能与其中一列相关联。 也就是说,一行数据只做一件事。 只要数据列中存在重复的数据,就必须拆分表。
例如:
订单表如下。
订单(订单号)、roomId、name、phone )、idn ) id
此时,如果一个人同时预约多个房间,则一个订单号对应多个数据。 如果联系人像这样重复的话,数据就会变得冗长。 这个时候,我们应该分割。
例如:
订单列表:
订单id (订单号、订单id、人员id ) (联系号码) )。
联系表:
peoId (联系人号码)、name、phone )、idn ) id
3 .第三范式(3NF )属性不依赖于其他非主属性属性,而是直接依赖于主键的第二范式(3NF )基于第一范式(2NF )来构建。 即,要满足第三范式) 3NF )就必须先满足第二范式) 2NF )。
简单的意思是对字段冗馀的约束。 这意味着任何字段都不能从其他字段派生。 字段必须没有冗馀。
例如:
假设您有一个员工(1.第一范式)表,其中包含9个属性: id (员工编号)、name (名称)、mobile (移动)、zip (权限)、province (city )和城市)
员工表中的province、city和district依赖于zip,而zip依赖于id。 换句话说,province、city和district的分发依赖于id,违反了3NF规则。 为了满足第三范式的条件,可以将此表分为employee和zip两个表,如下所示
(
idnamezip101枚三100001102李四200001103王五510001 1NF
zipprovincecitydistrict100001北京北京海淀区200001上海静安区51000广东省广州白云区
)数据库范式为数据库的设计和开发提供了可借鉴的范例,成为众多教材中重要的课程内容。
那么范式的提出是为了解决什么问题?
第一模式要求将列尽可能地分割为最小,希望消除在某列中容纳多个值的冗长行为
例如,用户表中的地址信息被分割成省、市这一明确的字段,可以按独立的字段来检索、查询第2正规形式,要求唯一的主键,并且对主键没有部分依存,表中的冗馀(多余)
例如,订货表的商品分类、详细信息在商品信息表中只保存一份即可。 第三范式的要求是间接不依赖主键的列,也就是希望消除表中冗馀的列
例如,用户表不需要额外存储该城市的人口、城市特征等信息。 很明显,这些范式大多是为了消除冗馀而提出的,可以最大限度地降低存储成本。
:列