数据库范式

本文通过一个艺术作品展览的例子,详细解析了数据库设计中的第一、第二及第三范式,旨在消除重复数据、部分依赖及传递依赖等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话说有个画展,很多画家,每个画家至少有一个作品(作品名不重),我想记录以下信息 :1每个作品名字 2作品的作家 3作品价格 4作家联系方式

第一范式:无重复的列
基本上是个表就满足第一范式,于是我坐了下面的表
作品名
作家名
作品价格
作家联系方式

第二范式:属性完全依赖于主键[消除部分子函数依赖]

最近简单的方法使用单个属性做主键,例如以作品名字做主键(加粗),下面就满足第二范式了。
作品名
作家名
作品价格
作家联系方式

反例:自从发现主键好用后一发不可收拾,于是做了一个组合元素的主键,把作品名和作家名做成组合主键(加粗),看看下面的例子如何
作品名
作家名
作品价格
作家联系方式
问题来了:根据作品名可以知道作品价格,而不可能根据作家名知道作品价格,这种自然而然的关系不难理解,同理联系方式依赖作家名而不是作品名
于是我们说作品价格依赖作品名,不依赖作家名,这是不完全依赖,不符合第二范式的要求,于是果断放弃这种想法。单属性主键可以避免不完全依赖

 第三范式:属性不依赖于其它非主属性[消除传递依赖]

非主键属性之间的依赖不利于表的维护,我们先理一下关系表,假设A->B表示B依赖A
作品名->作品价格
作品名->作家名->作家联系方式 ===>非主键属性之间还有依赖,继续拆分成 :作品名->作家名	和	作家名->作家联系方式,作家名和作品价格之间没有依赖,并且同时依赖于作品名
于是分成下面表
作品名
作家名
作品价格
作家名
作家联系方式

这样就满足第三范式了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值