范式的一些理解

来源:互联网 发布:王牌对王牌网络直播 编辑:程序博客网 时间: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_nameLast_nameAddress),假定全名不重复,能唯一标识列,则:

Superkey(主键):

First_nameLast_name

First_name,Last_name,Address

Candidate key(候选键):

First_nameLast_name

Non-prime attribute(非主属性):

Address

浅白版:2NF针对的是复合候选键(即候选键包含的字段个数>1)的情况,非主属性不能只依赖于复合候选键中的一部分字段。”显然,如果是非复合候选键,如果它符合1NF,那么它一定符合2NF

假设有这样一张涉及艺人与唱片公司的关系表:

Artist

艺人

Company

唱片公司

DurationYears

签约总年数

CompAddr

公司住址

Babyface

Solar

4

Indiana

Babyface

Laface

2

Indiana

显然,(ArtistCompany)为可以作为一个候选键,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单独作为一张表,这里不赘述。

 

原创粉丝点击