规范化 范式

1、第一范式:每一个属性不可再分

比如部门(部门号,部门名,部门经理,部门员工),里面的部门员工可以有很多员工,可以再分,所以不属于第一范式。

2、第二范式:在第一范式的基础上,没有属性对码有部分函数依赖
比如(Sno, Cno)作为码,但是Sno可以确定Sdept,产生了部分函数依赖,所以不属于第二范式。
在这里插入图片描述

3、第三范式:在第一范式的基础上,没有部分函数依赖和传递函数依赖

比如码是a,a->b, b-> c, b不包含于a,a->c, 属性c对码a产生了传递函数依赖,因此不是第三范式

4、BCNF:在第一范式的基础上,每一个决定因素都包含码

比如a->b,a称为决定因素,若a不包含码,则不是BCNF。

如果R是第三范式,且R只有一个候选码,则
R是第三范式等价于R是BC范式

假设我们有一个简单的电子商务网站,其中涉及的数据表有“订单(Orders)”和“订单详情(OrderDetails)”。 下面是两个表的示例结构: Orders表: | OrderID | CustomerID | OrderDate | | ------- | ---------- | ------------ | | 1 | 123 | 2021-01-01 | | 2 | 456 | 2021-01-02 | | 3 | 789 | 2021-01-03 | OrderDetails表: | OrderDetailID | OrderID | ProductID | Quantity | Price | | ------------- | ------- | --------- | -------- | ----- | | 1 | 1 | 100 | 2 | 10.0 | | 2 | 1 | 200 | 1 | 20.0 | | 3 | 2 | 100 | 1 | 10.0 | | 4 | 3 | 300 | 3 | 30.0 | 1. 第一范式(1NF) 第一范式要求每个数据表中的每个列都是原子的,即不可再分解的。在示例中,Orders表中的每个列都是原子的,而OrderDetails表中的“ProductID”列可以再分解为“ProductCode”和“ProductName”,因此不符合第一范式。 为了符合第一范式,我们可以将OrderDetails表拆分为两个表,即“订单详情(OrderDetails)”和“产品(Products)”: OrderDetails表: | OrderDetailID | OrderID | ProductCode | Quantity | Price | | ------------- | ------- | ----------- | -------- | ----- | | 1 | 1 | 100 | 2 | 10.0 | | 2 | 1 | 200 | 1 | 20.0 | | 3 | 2 | 100 | 1 | 10.0 | | 4 | 3 | 300 | 3 | 30.0 | Products表: | ProductCode | ProductName | | ----------- | ----------- | | 100 | ProductA | | 200 | ProductB | | 300 | ProductC | 现在每个表中的每个列都是原子的,符合第一范式。 2. 第二范式(2NF) 第二范式要求每个数据表中的每个非主键列都完全依赖于主键。在示例中,Orders表中的每个列都直接依赖于主键“OrderID”,而OrderDetails表中的“ProductCode”列不依赖于主键“OrderDetailID”,而是依赖于组合主键“OrderID”和“ProductCode”。 为了符合第二范式,我们可以将OrderDetails表拆分为两个表,即“订单详情(OrderDetails)”和“订单商品(OrderItems)”: OrderDetails表: | OrderDetailID | OrderID | | ------------- | ------- | | 1 | 1 | | 2 | 1 | | 3 | 2 | | 4 | 3 | OrderItems表: | OrderDetailID | ProductCode | Quantity | Price | | ------------- | ----------- | -------- | ----- | | 1 | 100 | 2 | 10.0 | | 2 | 200 | 1 | 20.0 | | 3 | 100 | 1 | 10.0 | | 4 | 300 | 3 | 30.0 | 现在每个表中的每个非主键列都完全依赖于主键,符合第二范式。 3. 第三范式(3NF) 第三范式要求每个数据表中的每个非主键列都不依赖于其他非主键列。在示例中,OrderItems表中的“Price”列依赖于“Quantity”列,因此不符合第三范式。 为了符合第三范式,我们可以将OrderItems表拆分为两个表,即“订单商品(OrderItems)”和“商品价格(ProductPrices)”: OrderItems表: | OrderDetailID | ProductCode | Quantity | | ------------- | ----------- | -------- | | 1 | 100 | 2 | | 2 | 200 | 1 | | 3 | 100 | 1 | | 4 | 300 | 3 | ProductPrices表: | ProductCode | Price | | ----------- | ----- | | 100 | 10.0 | | 200 | 20.0 | | 300 | 30.0 | 现在每个表中的每个非主键列都不依赖于其他非主键列,符合第三范式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值