数据库范式

来源:互联网 发布:淘宝网刷单是真的吗 编辑:程序博客网 时间:2024/06/07 01:24
话说有个画展,很多画家,每个画家至少有一个作品(作品名不重),我想记录以下信息 :1每个作品名字 2作品的作家 3作品价格 4作家联系方式
第一范式:无重复的列
基本上是个表就满足第一范式,于是我坐了下面的表
作品名
作家名
作品价格
作家联系方式

第二范式:属性完全依赖于主键[消除部分子函数依赖]
最近简单的方法使用单个属性做主键,例如以作品名字做主键(加粗),下面就满足第二范式了。
作品名
作家名
作品价格
作家联系方式

反例:自从发现主键好用后一发不可收拾,于是做了一个组合元素的主键,把作品名和作家名做成组合主键(加粗),看看下面的例子如何
作品名
作家名
作品价格
作家联系方式
问题来了:根据作品名可以知道作品价格,而不可能根据作家名知道作品价格,这种自然而然的关系不难理解,同理联系方式依赖作家名而不是作品名
于是我们说作品价格依赖作品名,不依赖作家名,这是不完全依赖,不符合第二范式的要求,于是果断放弃这种想法。单属性主键可以避免不完全依赖
 第三范式:属性不依赖于其它非主属性[消除传递依赖]
非主键属性之间的依赖不利于表的维护,我们先理一下关系表,假设A->B表示B依赖A
作品名->作品价格
作品名->作家名->作家联系方式 ===>非主键属性之间还有依赖,继续拆分成 :作品名->作家名作家名->作家联系方式,作家名和作品价格之间没有依赖,并且同时依赖于作品名
于是分成下面表
作品名
作家名
作品价格
作家名
作家联系方式

这样就满足第三范式了