数据库三范式

206 阅读2分钟

范式是最小冗余的表结构,三范式的概念如下所述。

1.第一范式

如果每列都是不可再分的最小数据单元(也叫作最小的原子单元),则满足第一范式,第一范式的目标是确保每列的原子性。如图,其中的Address列违背了第一范式列不可再分的原则,要满足第一范式,就需要将Address列拆分为Country列和City列。

BuyerIDAddress
1中国北京市
2美国纽约市
3日本东京市
BuyerIDCountryCity
1中国北京
2中国纽约
3中国东京

2.第二范式

第二范式在第一范式的基础上,规定表中的非主键列不存在对主键部分的部分依赖,即第二范式要求每个表只描述一件事情。如图,Orders表既包含订单信息,也包含产品信息,需要将其拆分为两个单独的表。

订单表:orders

字段例子
订单编号001
产品编号A001
订购日期2022-01-03
产品价格100

拆分为:订单表:orders

字段例子
订单编号001
订购日期2022-01-03
......
字段例子
产品编号A001
产品价格100
......

3.第三范式

第三范式的定义为:满足第一范式和第二范式,并且表中的列不存在对非主键列的传递依赖。如果所示,除了主键的订单编号,顾客姓名依赖于非主键的顾客编号,因此需要将列去除。

字段例子
订单编号001
订购日期2022-01-03
顾客编号C001
顾客姓名Alex
......

顾客编号去除后:

字段例子
订单编号001
订购日期2022-01-03
顾客姓名Alex
......