数据库三大范式

第一范式(1NF):列不可拆分

假设我们有一个学生信息表,用来记录学生的姓名和地址:

学生ID姓名地址
1张三xx省xx市xx区

这个表违反了第一范式,因为地址不符合不可拆分要求。为了满足第一范式,需要把地址拆分成省、市、区。

第二范式(2NF):不能只依赖主键的一部分

现在,如果我们想要记录学生的课程成绩,表结构可能会变成这样:

学生ID姓名课程成绩
1张三数学90
1张三英语85
2李四数学95
2李四英语80

在这个例子中,学生ID和课程一起构成了联合主键(因为一个学生可以有多个课程成绩)。但是,姓名只依赖于学生ID,并不依赖于课程。这就违反了第二范式,因为存在非主键字段(姓名)只依赖于主键的一部分(学生ID)。为了满足第二范式,我们需要将这个表拆分为两个表:

学生表:

学生ID姓名
1张三
2李四

成绩表:

学生ID课程成绩
1数学90
1英语85
2数学95
2英语80

这样,每个表都满足了第二范式。

第三范式(3NF):禁止间接依赖

假设我们有一个订单表,用来记录订单信息和客户信息:

订单ID客户ID客户姓名客户电话商品价格
1001001张三13800138000商品A100
1002002李四13900139000商品B200

在这个例子中,订单ID是主键,但是客户电话依赖于客户ID,而不是直接依赖于订单ID。这违反了第三范式,因为存在对非主键字段的传递依赖。为了满足第三范式,我们需要进一步拆分这个表:

订单表:

订单ID客户ID商品价格
1001001商品A100
1002002商品B200

客户表:

客户ID客户姓名客户电话
001张三13800138000
002李四13900139000

通过这种方式,我们消除了表中的传递依赖,满足了第三范式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfeil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值