范式的一些理解
来源:互联网 发布:王牌对王牌网络直播 编辑:程序博客网 时间:2024/04/30 08:55
范式的理解
一级范式(1NF),数据库表必须如实地展现“关系”,并且不允许有“重复列”出现。
姓名
年龄
课程1
课程2
孙玉玺
19
数据结构
数字逻辑
灵印
19
高数
Windows程序设计
假设姓名是唯一的,则对于选修课和必选课的出现,属于违反1NF的情况,因为课程1和课程2在概念上是一致的,属于重复列,如果我要添加课程3,则需要新建列,会对数据进行重复存储,解决办法是新建表:《课程表》
二级范式(2NF),不存在非主属性对任一候选键的部分函数依赖。每个属性描述的东西都必须针对整个键,即属性是依赖于单个候选键的全部属性
Superkey:主键,如果属性或属性组合能唯一标识一条记录,则它就是一个Superkey。
Candidate key:候选键,当Superkey只包含一个属性时,则它是一个候选键;当Superkey包含一组属性时,仅当这一组属性不包含另一Superkey时,它是一个候选键。换句话说,候选键是“纯净的”、最小化的Superkey。这句话也表明主键可以不是最简的属性组合。
Non-prime attribute:非主属性,未在任何候选键中出现的属性,即为非主属性。注意是未在候选键中出现的属性,才是非主属性,不是在主键中。
举例来说,对表(First_name,Last_name,Address),假定全名不重复,能唯一标识列,则:
Superkey(主键):
(First_name,Last_name)
(First_name,Last_name,Address)
Candidate key(候选键):
(First_name,Last_name)
Non-prime attribute(非主属性):
Address
浅白版:“2NF针对的是复合候选键(即候选键包含的字段个数>1)的情况,非主属性不能只依赖于复合候选键中的一部分字段。”显然,如果是非复合候选键,如果它符合1NF,那么它一定符合2NF。
假设有这样一张涉及艺人与唱片公司的关系表:
Artist
艺人
Company
唱片公司
DurationYears
签约总年数
CompAddr
公司住址
Babyface
Solar
4
Indiana
Babyface
Laface
2
Indiana
显然,(Artist,Company)为可以作为一个候选键,DurationYears在这没有问题,但CompAddr是违反2NF的,它只依赖于候选键的一部分(依赖于Company),这是违反2NF的,为了消除这种情况,我们可以:
Artist
艺人
CompID
唱片公司
DurationYears
签约总年数
Babyface
1
4
Babyface
2
2
ID
Company
唱片公司
CompAddr
公司住址
1
Solar
Indiana
2
Laface
Indiana
三级范式(3NF):
Every non-prime attribute is non-transitively dependenton every key of the table.
不存在非主属性对任一键(候选键)的传递依赖。
传递依赖,你可以顾名思义,这里就不再引入定义了,举个例子,有下面一张表:
Tournament
赛事
Year
年份
Winner
冠军
Winner Date of Birth
冠军生日
Indiana Invitational
1998
Al Fredrickson
21 July 1975
Cleveland Open
1999
Bob Albertson
28 September 1968
Des Moines Masters
1999
Al Fredrickson
21 July 1975
Indiana Invitational
1999
Chip Masterson
14 March 1977
这里的候选键为(Tournament,Year),显然有这样的决定关系:
(Tournament,Year)→Winner
(Tournament,Year)→Winner→Winner Dateof Birth
其中第二条就属于违反3NF的情况,因为Winner Date of Birth依赖于Winner而不是直接依赖于候选键。这种情况下,可以将Winner,Winner Dateof Birth单独作为一张表,这里不赘述。
- 范式的一些理解
- 对范式的理解
- 三个范式的理解
- 数据库范式的理解
- 数据库范式的理解
- 范式的理解
- 数据库范式的理解
- 数据库范式的理解
- 三范式的理解
- 范式的理解
- 范式的其他理解
- 范式的理解
- L0范式,L1范式,L2范式的简单理解
- 数据库范式的通俗理解
- 第三范式的简单理解
- 通俗的理解三个范式
- 数据库设计范式的理解
- 关于编程范式的理解
- Python中的包安装工具easy_install
- 暑假ASP.NET学习笔记——7月24号
- 暑假ASP.NET学习笔记——7月25号
- 暑假ASP.NET学习笔记——7月17号
- jsp内置对象及用途
- 范式的一些理解
- 暑假ASP.NET学习笔记——7月27号
- 学位论文中章标题与图表题注自动编号的新技巧
- vc多线程编程
- Android应用程序基础(Application Fundamentals)
- 从客户端检测到有潜在危险的Request.Form 值
- 暑假ASP.NET学习笔记——7月30号
- c++builder 出错
- 暑假ASP.NET学习笔记——7月31号