什么是关系数据库 带你深入了解关系数据库

什么是关系数据库 带你深入了解关系数据库,第1张

1、关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。

2、关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。

3、当创造一个关系数据库的时候,你能定义数据列的可能值的范围和可能应用于那个数据值的进一步约束。而SQL语言是标准用户和应用程序到关系数据库的接口。其优势是容易扩充,且在最初的数据库创造之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。主流的关系数据库有oracle、db2、sqlserver、sybase、mysql等。

参照关系就是主外键,其最重要的作用是保护你的数据的完整性。

SQL的主键和外键的作用:

外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。

(2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。

比如:

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键;

课程表(课程编号,课程名,学分)

其中课程编号是唯一的,课程编号就是一个主键;

成绩表(学号,课程号,成绩)

成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:

一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份z号是唯一能确定你这个人的,其他都可能有重复,所以,身份z号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

二、主键、外键和索引的区别

定义:

主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引--该字段没有重复值,但可以有一个空值

作用:

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

索引--是提高查询排序的速度

个数:

主键--主键只能有一个

外键--一个表可以有多个外键

索引--一个表可以有多个唯一索引

创建SQL的主键和外键约束的方法:

create table Student --建表格式:create table 自定义的表名

( --字段名一般为有一定意义的英文

StudentName nvarchar(15), -- 格式:字段名类型()括号里面的是允许输入的长度

StudentAge int, --int型的后面不需要接长度

StudentSex nvarchar(2) --最后一个字段后面不要逗号

)

--在创建表时就可以对字段加上约束:

create table Student

(

StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)

StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空

StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)

StudentAge int DEFAULT ((0)), --加默认值约束

StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式)

)

--如果在表创建好了以后再加约束,则格式分别为:

-- 主键:

alter table 表名

add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名

primary key (字段名) --字段名同上

--唯一约束:

alter table 表名

add constraint UQ_字段名

unique (字段名)

--外键约束:

alter table 表名

add constraint FK_字段名--"FK"为外键的缩写

foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)

alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)

alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)

ON UPDATE CASCADE ON DELETE CASCADE

级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。

--检查约束:

alter table 表名

add constraint CK_字段名

check (条件表达式) --条件表达式中的条件用关系运算符连接

--默认值约束:

alter table 表名

add constraint DF_字段名

default '默认值' for 字段名--其中的'默认值'为你想要默认的值,注意'for'

--删除创建的约束:

alter table 表名

drop constraint 约束名--约束名为你前面创建的如:PK_字段这样的约束名

--注意:如果约束是在创建表的时候创建的,则不能用命令删除

--只能在'企业管理器'里面删除

-- 获取SqlServer中表结构

SELECT syscolumnsname,systypesname,syscolumnsisnullable,

syscolumnslength

FROM syscolumns,systypes

WHERE syscolumnsxusertype = systypesxusertype

AND syscolumnsid = OBJECT_ID('Student')

-- 单独查询表递增字段

SELECT [name] FROM syscolumns WHERE

id = OBJECT_ID(N'Student') AND COLUMNPROPERTY(id,name,'IsIdentity')=1

-- 获取表主外键约束

EXEC sp_helpconstraint 'StuResults'

-- 查询表主键外键信息

SELECT sysobjectsid objectId,OBJECT_NAME(sysobjectsparent_obj) tableName,

sysobjectsname constraintName, sysobjectsxtype AS constraintType,

syscolumnsname AS columnName

FROM sysobjects INNER JOIN sysconstraints

ON sysobjectsxtype in('C', 'F', 'PK', 'UQ', 'D')

AND sysobjectsid = sysconstraintsconstid

LEFT OUTER JOIN syscolumns ON sysconstraintsid = syscolumnsid

WHERE OBJECT_NAME(sysobjectsparent_obj)='StuResults'

第6章 关系模式的规范化理论

关系数据库的规范化设计是指面对一个现实问题,如何选择一个比较好的关系模式集合。规范化设计理论对关系数据库结构的设计起着重要的作用。

关系模型有严格的数学理论基础,因此人们就以关系模型为作为讨论对象,形成了数据库逻辑设计的一个有力工具――关系数据库的规范化理论。

本章内容

(1)关系模式的冗余和异常问题。

(2)FD的定义、逻辑蕴涵、闭包、推理规则、与关键码的联系;平凡的FD;属性集的闭包;推理规则的正确性和完备性;FD集的等价;最小依赖集。

(3)无损分解的定义、性质、测试;保持依赖集的分解。

(4)关系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。

(5)MVD、4NF、5NF的定义。

一,关系模式设计中的问题

什么是好的数据库

构建好的,合适的数据库模式,是数据库设计的基本问题

a) 体现客观世界的信息

b) 无过度的冗余

c) 无插入异常

d) 无删除异常

e) 无更新复杂

如书上的S_C_G关系。

假设需要设计一个学生学习情况数据库StuDB。

下面我们以模式S_C_G(Sno,Sname,Dname,Age,Cno,Cname,Score,Pre_cno)为例来说明该模式存在的问题。下表是其一个实例。

冗余度大:每选一门课,他本人信息和有关课程信息都要重复一次。

插入异常:插入一门课,若没学生选修,则不能把该课程插入表中。

删除异常:如S11号学生的删除,有一门只有他选,会造成课程的丢失。

更新复杂:更新一个人的信息,则要同时更新很多条记录。还有更新选修课时也存在这样的情况。

异常的原因:

数据信赖的约束

解决方法:

数据库设计的规范化:分解,每个相对的独立,依赖关系比较单纯,如分解为3NF

我们采用分解的方法,将上述S_C_G分解成以下三个模式:

S(Sno,Sname,age,Dname)

C(Cno,Cname,Pre_cno)

S_C(Sno,Cno,Score)

规范化设计理论包括三个内容:

i> 数据信赖 ---- 核心,研究数据之间的联系

ii> 范式 ---- 关系模式的标准

iii> 模式设计方法 ---- 自动化设计的基础

二, 函数依赖 ( Functional Dependency,FD)

1 函数依赖的定义:(还有非函数的依赖?,什么是函数? 给出一个值能唯一确定另外一个值?映射:一对一,多对一,一对多)

定义:函数依赖是指一个或一组属性可以(唯一)决定其它属性的值。

数学的语言:

设有关系模式R(U),其中U={A1,A2,…,An}是关系的属性全集,X、Y是U的属性子集,设t和u是关系R上的任意两个元组,如果t和u在X的投影t[X]=u[X]推出t[Y]=u[Y],即:t[X]=u[X] => t[Y]=u[Y],

则称X函数决定Y,或Y函数依赖于X。记为X→Y。

在上述的关系模式S(Sno,Sname,age,Dname)中,存在以下函数依赖:

Sno→age

Sno→Dname

(Sno,Cno)→Score

2 几种类型的函数依赖

定义62(非平凡函数依赖、平凡函数依赖):一个函数依赖X→Y如果满足Y⊈X,则称此函数依赖为非平凡函数依赖,否则称之为平凡函数依赖。

例如X→Φ, X→X , XZ→X等都是平凡函数依赖。

定义63(完全函数依赖、部分函数依赖):设X、Y是关系R的不同属性集,若X→Y (Y函数依赖于X),且不存在X’ ⊂X ,使X’→Y,则称Y完全函数依赖于X,记为;(即不存在真子集仍然是函数依赖关系的函数依赖是完全函数依赖)。

否则则称Y部分函数依赖于X,记为 。

例如,在上例关系S中, 是完全函数依赖;

、 是部分函数依赖。

在属性Y与X之间,除了完全函数依赖和部分函数依赖关系等直接函数依赖,还存在间接函数依赖关系。如果在关系S中增加系的电话号码Dtel,从而有Sno→Dname, Dname→Dtel,于是Sno→Dtel。在这个函数依赖中,Dtel并不直接依赖于Sno,是通过中间属性Dname间接依赖于Sno。这就是传递函数依赖。

定义64(传递函数依赖):设X、Y、Z是关系模式R (U)中的不同的属性集,如果X→Y,Y→X,Y→Z,则称Z传递依赖于X。否则,称为非传递函数依赖。

举例说明:

定义65 关键字(Key,候选键):在关系模式R(U)中,若K⊆U,且满足,则称K为R的关键字。

一个包含了关键字的属性集合也能够函数决定(但不是完全函数决定,而是部分决定)属性全集,我们把这种包含了关键字的属性集合称为超关键字(Super Key)。

例如,在上例的S(Sno,Sname,Dname,Age)、C(Cno,Cname,Pre_cno)、S_C(Sno,Cno,Score)三个关系模式中,存在以下关键字:

所以,Sno、Cno和(Sno,Cno)分别是关系模式S、C和S_C的关键字 。

所以,(Sno,Sname)和(Sno,Dname)都不是关键字,而是超关键字。

3 函数依赖的公理系统

(1) 函数依赖的逻辑蕴涵

例如 在上述的传递函数依赖中,由X→Y,Y→Z,推导出X→Z,这可以表示为:

{X→Y,Y→Z}⊨ X→Z 其中: ⊨表示逻辑蕴涵。

一般地,函数依赖的逻辑蕴涵定义如下:

定义66(逻辑蕴涵):设F是由关系模式R(U)满足的一个函数依赖集,X→Y是R的一个函数依赖,且不包含在F,如果满足F中所有函数依赖的任一具体关系r,也满足X→Y,则称函数依赖集F逻辑地蕴涵函数依赖X→Y,或称X→Y可从F推出。可表示为: F⊨X→Y

例:Sno→Dname, Dname→Dtel, 则: Sno→Dtel

F X→Y

函数依赖集F的闭包F+

定义67:函数依赖集F所逻辑蕴涵的函数依赖的全体称为为F的闭包(Closure),记为F+,即F+={X→Y|F⊨X→Y}

例如,有关系R(X,Y,Z),它的函数依赖集F={X→Y,Y→Z},则其闭包F+为:

(2) Armstrong公理系统

1)独立推理规则

即下面给出的Armstrong公理的三条推理规则是彼此独立的。

A1:自反律(Reflexivity)

如果Y⊆X,则X→Y成立,这是一个平凡函数依赖。

根据A1可以推出X→Ф、U→X等平凡函数依赖(因为Ф⊆X⊆U)、XY→X。

A2:增广律(Augmentation)

如果X→Y,且Z⊆W,则XW→YZ成立。

根据A2可以推出XW→Y、XZ→YZ或XW→YW、X→XY、XY→X等。

A3:传递律(Transitivity)

  如果X→Y且Y→Z,则X→Z成立

其他推理规则

推论1:合并规则(The Union Rule)

{X→Y,X→Z}⊨ X→YZ

推论2:分解规则(The Decomposition Rule)

如果X→Y,Z ⊆ Y,则X→Z成立; (X→YZ),X→Y,X→Z

推论3:伪传递规则(The Pseudo Transitivity Rule)

{X→Y,WY→Z}⊨ XW→Z

证:(1)X→Y⊨ X→XY(A2增广律)

X→Z⊨  XY→YZ (A2增广律)

由上可得X→YZ(A3传递律)

(2)Z⊆Y⊨ Y→Z (A1自反律)

  X→Y  (给定条件)

由上可得X→Z (A3传递律)

(3)X→Y⊨WX→WY  (A2增广律)

WY→Z (给定条件)

由上可得XW→Z(A3传递律)

例62:设有关系模式R(A,B,C,D,E)及其上的函数依赖集F={AB→CD,A→B,D→E},求证F必蕴涵A→E。

证明:∵ A→B (给定条件)

∴ A→AB (A2增广律)

∵ AB→CD (给定条件)

∴ A→CD (A3传递律)

∴ A→C,A→D (分解规则)

∵ D→E (给定条件)

∴ A→E (A3传递律)

证毕。

一个重要定理

定理61:若Ai(i=1,2,…,n)是关系模式R的属性,

则X→(A1,A2,…,An)成立的充分必要条件是X→Ai均成立

证明由分解和合并规则容易得到。

推论61 X是候选键的充分必要条件是X→每个属性Ai。

例:

1 现有如下关系模式:R(A#,B#,C,D,E) ,R上存在的FD有A#B#→E,B#→C,C→D ,求R的一个候选键。

解:

A#B#→E, 得 A#B#→A#B#E

又B#→C, 得 A#B#→A#B#CE

又C→D, 得 A#B#→A#B#CDE

因此A#B#是候选键。

也可以这样做:

先由B#→C 出发,得B#→B#CD, 还少一个A#, 再加一个A#即可,得

A#B#→A#B#CDE

2 设有关系模式R (A,B,C,D),F是R上成立的FD集,F = {D→A,D→B},试写出关系模式R的候选键,并说明理由。

方法一

因为:

D→A,D→B (已知)得 D→AB

D→D,得D→ABD, 但 D!→C

而CD→C(A1自反律),

我们有,CD→ABCD, 即 CD→U

因此,CD为候选键。

也可以这样做:

方法二

D→A,D→B (已知)

D→D, 但 D!→C

而CD→C(A1自反律),

我们有,CD→A, CD→B, CD→C, CD→D, 由合并规则知:CD→ABCD

因此,CD为候选键。

3 关系模式R(A,B,C,D)的函数依赖集为F={AC→B},求R的候选键

解:

因为 AC→B

所以 AC→ACB

所以 ACD→ABCD

所以R的候选码是ACD

4 有关系模式R(A,B,C,D,E,F)其函数依赖集为F={E→D,C→B,CE→F,B→A},判断CE为候选键。

CE→D (A2 增广律)

CE→B

CE→C (A1 自反律)

CE→E

CE→F (给定条件)

CE→C, C→B, 则 CE→B, 又 B→A, 所以有:CE→A

由合并规则,即CE→U, 为候选键

按方法一

由E→D知:E→DE

由C→B知:C→BC, 又B→A, 知:C→ABC

由合并规则知:

CE→ABCDE, 为候选键

5 设关系R={A,B,C,D,E,F},其函数依赖集F={A→B, C→D, D→E, E→F, F→C},求R的所有候选键。

解:

C→D, C→E, C→E , C→C, C! →A, 把A加上,则有

AC→A, AC→B, … AC→U

因此AC为候选键。

又因为:

D→E, D→F, D→C, D→D, 同理:AD为候选键。

同理可得:AE, AF 也为候选键。

综上所述,R的候选码为:AC,AD,AE,AF。

关系模式R(A,B,C,D)的函数依赖集为F={AC→B},则R的候选键为( )。

6 关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。关系模式R的候选建是什么?

解法:从函数依赖集出发,把所有属性分为4类

1、L类:全部出现在函数依赖的左半部

2、R: 全部出现在函数依赖的右半部

3、LR: 出现在函数依赖的左右两边

4、N: 不出现在函数依赖中

可能成为候选键的有L类,LR类和N类

对于L类,求出它的闭包,若包含所有属性,则说明其为候选键,且为唯一候选键。

对于LR类,求出其闭包,若包含所有属性,则为候选键,若不包含,在找出其中一个属性结合。

对于N类,直接加至候选键即可。

L:无

R: Z

LR: W,X,Y

N:无

先排除Z

在LR中,W的闭包为{W,Y,Z,X}

X的闭包为{X,Z}

Y闭包为{Y,W}

WX的闭包为{W,X,Y,Z}

WY的闭包为{W,Y}

XY的闭包为{X,Y,Z,W}

WXY的闭包为{X,Z,Y,W}

由此可见,可能的键为{W,WZ,XY,XYW},去掉多余的属性,得:W,XY为候选键。

F+很大,一般不去求它。在我们求候选键时,主要用到的是属性集的闭包。

属性集闭包

定义68(属性集闭包): 设有关系模式R(U), U={ A1,A2,…,An}, X是U的子集, F是U上的一个函数依赖集,则属性集X关于函数依赖集F的闭包 定义为:

={Ai|Ai∈U,且X→Ai可用阿氏公理从F推出}

即:属性(集)闭包是 那些由X用阿氏公理从F推出的属性组成的集合。

例:设关系模式R(A,B,C)的函数依赖集为F={A→B,B→C},分别求A、B、C的闭包。

解:若X=A,

∵ A→B,B→C(给定条件)

∴ A→C (A2传递律)

∵ A→A (A1自反律)

∴ ={A,B,C} (据定义)

若X=B

∵ B→B (A1自反律)

B→C (给定条件)

∴ ={B,C} (据定义)

若X=C,

C→C (自反律)

∴ ={C} (据定义)

定理62: 设F是关系模式R(U)上的函数依赖集,U是属性全集,X,Y⊆U,则函数依赖X→Y是用阿氏公理从F推出的,充分必要条件是Y⊆ ;

反之,能用阿氏公理从F推出的所有X→Y的Y都在 中。

证明:略

这个定理告诉我们,只要Y⊆ ,则必有X→Y。于是,一个函数依赖X→Y能否用阿氏公理从F推出的问题,就变成判断Y是否为 子集的问题。

属性集的闭包计算

算法61:求属性集X(X⊆ U)关于U上的函数依赖集F的闭包  。

输入:属性全集U, U上的函数依赖集F, 以及属性集X⊆ U。

输出:X关于F的闭包 。

方法:根据下列步骤计算一系列属性集合X(0),X(1),…

(1) 令X(0)=X,i=0;

(2) 求属性集

/在F中寻找满足条件V ⊆ X(i)的所有函数依赖V→W,并记属性W的并集为B/

(3) X(i+1)=X(i) ∪B

(4)判断X(i+1)= X(i)吗?

(4)若X(i+1) ≠ X(i),则用i+1取代i,返回(2);

(5)若X(i+1) = X(i),则 =X(i),结束。

定理63 Armstrong 公理是正确的,完备的。

完备性:F所蕴涵的每个函数依赖都可由Armstrong 公理从F可推出。

3 函数依赖集的等价和覆盖

定义69(函数依赖集的等价、覆盖):设F和G是关系R(U)上的两个依赖集,若F+=G+,则称F与G等价,记为F=G。也可以称F覆盖G,或G覆盖F;也可说F与G相互覆盖。

检查两个函数依赖集F和G是否等价的方法是:

第一步:检查F中的每个函数依赖是否属于G+,若全部满足,则F⊆G+。如若有X→Y∈F,则计算 ,如果Y ⊆ , 则X→Y∈G+;

第二步:同第一步,检查是否G⊆F+;

第三步:如果F ⊆ G+,且G⊆F+,则F与G等价。

由此可见,F和G等价的充分必要条件是:F⊆G+,且G⊆F+。

引理61:设G是一个函数依赖集,且其中所有依赖的右部都只有一个属性,则G覆盖任一左部与G(左部)相同的函数依赖集。

证明:构造G={X→A|X→Y∈F且A∈Y}

 由A∈Y,X→Y∈F根据分解规则导出,从而等到G ⊆ F+。

 反之,如果Y=A1A2…An,而且X→A1,X→A2,…X→An在G中可根据合并律等到F⊆ G +。

 由此可见,F与G等价,即F被G覆盖。

一个函数依赖集F可能有若干个与其等价的函数依赖集,我们可以从中选择一个较好以便应用的函数依赖集。标准至少是:

所有函数依赖均独立,即该函数依赖集中不存在这样的函数依赖,它可由这个集合中的别的函数依赖推导出来。

表示最简单,即每个函数依赖的右部为单个属性,左部最简单。

定义610(最小函数依赖集):函数依赖集F如果满足下列条件,则称F为最小函数覆盖,记为Fmin:

(1) F中每一个函数依赖的右部都是单个属性。

(2) 对F中任一函数依赖X→A,F-{X→A}都不与F等价。

(3) 对于F中的任一函数依赖X→A, {F-{X→A}}∪{Z→A}都不与F等价,其中Z为X的任一子集。

求函数依赖集F的最小覆盖的方法是:

(1) 检查F中的每个函数依赖X→A,若A= A1,A2,…,Ak,则根据分解规则,用X→Ai(i=1,2,…,k)取代X→A。

(2) 检查F中的每个函数依赖X→A,令G=F-{X→A},

若有 A∈ ,则从F中去掉此函数依赖。

(3) 检查F中各函数依赖X→A,设X= B1,B2,…,Bm,检查Bi ,

当A∈ 时,即以X-Bi替换X。

例65:求下列函数依赖集的最小覆盖:

 F={AH→C,C→A,EH→C,CH→D,D→EG,CG→DH,CE→AG,ACD→H }。

解:(1)用分解规则将F中的所有依赖的右部变成单个属性,可以得到以下11个函数依赖:

AH→C,C→A,CH→D,ACD→H (给定)

  C→E,C→G(由C→EG分解得到)

  EH→C(给定)

  CG→H,CG→D (由CG→DH分解得到)

  CE→A,CE→G (由CE→AG分解得到)

(2) 根据阿氏公理去掉F中的冗余依赖

由于从C→A可推出CE→A,从C→A、CG→D、ACD→H推出CG→H,因此CE→A和CG→H是冗余,可从F删除 。

 (3) 用所含属性较少的依赖代替所含属性较多的依赖。

由于C→A, ACD→H中A是冗余属性,因此,可用CD→H代替ACD→H,故删除ACD→H。

最后得到F的最小覆盖为:

F={AH→C,C→A,CH→D,CD→H,C→E,C→G,EH→C,CG→D,CE→G}

65 关系模式的规范化

一.什么是范式(Normal Forms)

构造数据库必须遵循一定的规则,满足特定规则的模式称为范式。

R(U|F)

一个关系满足某个范式所规定的一系列条件时,它就属于该范式。

可以用规范化要求来设计数据库。

也可验证设计结果的合理性,用其来指导优化数据库设计过程。

关系规范化条件可分为几级,每级称为一个范式,记为第xNF (Normal Forms)

1NF 2NF3NF BCNF, 4NF 5NF

级别越高,条件越严格

5NF(4NF(BCNF(3NF(2NF(1NF

范式是衡量模式优劣的标准,范式表达了模式中数据依赖之间应满足的联系。如果关系模式R是3NF,那么R上成立的非平凡FD都应该左边是超键或右边是非主属性。如果关系模式R是BCNF,那么R上成立的非平凡的FD都应该左边是超键。范式的级别越高,其数据冗余和 *** 作异常现象就越少

二,第1范式(1NF)

1 如果一个关系模式R的每个属性的域都只包含单纯值,而不是一些值的集合或元组,则称关系是第1范式,记为R∈1NF

或: 如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式

(理解:每个元组的每个属性只含有一个单纯值,即要求属性是原子的。)

这是关系模式的基本要求,条件是最松的,只要你不硬把两个属性塞到一个字段中去。如果不满足1NF,就不是关系数据库。

字段1 字段2 字段3

属性1 属性2

把一个非规范化的模式变为1NF有两种方法:

把不含单纯值的属性分解为多个属性,使它们仅含有单纯值。

例:通讯方式:电话、手机,邮编,地址等。

通讯方式分开:电话,邮编,通讯地址。

例:NameFirst Name, Last Name

2) 把关系模式分解,并使每个关系都符合1NF

学生(学生信息)

3 原子属性:

列的:每个字段不再分割成多个属性。

行的:每个元组在表可只出现一次。

4 第一范式中一般情况下都会存在着数据的冗余和异常现象,因此关系模式需要进一步的规范化。

三,第2范式 (2NF)

它是在1NF的基础上建立起来的。

如果关系模式R∈1NF,且它的任一非主属性都完全函数依赖于任一候选关键字,则称R满足第2范式,记为R∈2NF

(理解:不存在非主属性对关键字的部分函数依赖)

例:学生(sno, cno, score, credit)是否属于2NF?

(sno,cno) -f Score

但 (sno,cno)-p credit

因此,学生∈1NF。

例:S(sno,sname,age,dname,dtel)

因为每个非主属性对关键字S都是完全函数依赖的,S∈2NF

由上例,2NF依然可有过多冗余(dtel)。继续分解,提高条件。

四,第3范式(3 NF)

如果R∈2NF,且每一个非主属性不传递依赖于任一候选关键字,则称R∈3NF

(理解:任一属性不依赖于其它非主属性)

例:S(sno,sname,age,dname,dtel)

因为dtel属性对关键字sno是传递函数依赖的,S!∈3NF

分解:

S(sno,sname,age,dname)

D(dname,dtel)

注:一个R∈3NF它个每个非主属性既不部分依赖也不传递依赖于候选关键字。

例:S_C_G(U)是第几范式? 2NF

五,BCNF(Boyce-Codd)

在第3范式的基础上,设有R,及其函数依赖集F,X和A是R的属性集合,且A!(X,如果只要R满足XA,X就包含R的一个候选关键字,则称R满足BCNF,记为:

理解:表可不存在任何字段(主属性和非主属性)对任一候选关键字的完全函数依赖则符合BCNF

(1) 所有非主属性A对键都是完全函数依赖的(R∈2NF)。

(2) 没有属性完全函数依赖于非键的任何属性组(R∈3NF)。

(3) 所有主属性对不包含它的键是完全函数依赖的(新增加条件)。

例,模式S (NAME,SEX,BIRTH,ADDR,DNAME)的主属性为:NAME,SEX,BIRTH和ADDR,候选关键字为:(NAME,SEX)、(NAME,BIRTH)以及(NAME,ADDR)。

定义中的A为(ADDR,DNAME)。显然有:

例613:关系模式STC(SNO,TNO,CNO),SNO表示学号,TNO表示教师编号,CNO表示课程号。每一个教师只教一门课,每门课有若干教师,某一个学生选定某门课,就对应一个固定教师。试判断ST的最高范式。

解 由语义可得到如下的函数依赖:

(SNO,CNO)→TNO,(SNO,TNO)→CNO,TNO→CNO

这里(SNO,CNO),(SNO,TNO)都是侯选关键字。

因为没有任何非主属性对侯选关键字部分依赖,所以STC∈2NF。

没有任何非主属性对侯选关键字传递依赖,所以STC∈3NF。

但在F中有TNO→CNO,而TNO不包含侯选关键字,所以STC不是BCNF关系

这里我们可以将STC(SNO,TNO,CNO)分解成ST(SNO,TNO)和TC(TNO,CNO),它们都是BCNF。

范式之间的关系

例:

   1 现有如下关系模式: R(A#,B#,C,D,E) 其中:A#B#组合为码 R上存在的函数依赖有A#B#→E,B#→C,C→D

(1)该关系模式满足2NF吗为什么

  (2)如果将关系模式R分解为:

    R1(A#,B#,E)

   R2(B#,C,D) 指出关系模式R2的码,说明其最高满足第几范式 (在1NF~BCNF之内)。

   (3)将关系模式R分解到BCNF。

问题一:创建数据库的两种方法 交互式创建,就是你右击数据库然后选择新建数据库按钮就可以还有一种就是sql语句创建比如创建一个数据库名为a 的数据库,那么sql语句就是,create database a;然后执行下就可以

问题二:如何用MySQL建立数据库 这很简单啊!

在Windows下,假如你的MySQL装在 D:\MySQL

就可以这样:

先切换到它的bin目录

cd D:\MySQL\bin\

抚:\MySQL\bin>mysql -u root -p

接着输入你的root密码

接下来你就可以创建数据库、创建用户、创建修改表之类的 *** 作(常用命令如下)。

查看现有数据库

mysql> show databases;

创建数据库(假如数据库名为 mydb)

mysql> create database mydb;

删除数据库(假如数据库名为 mydb)

mysql> drop database accounts;

使用数据库(假如使用数据库 mydb)

mysql> use mydb;

执行完使用数据库命令后,就可以对该数据库进行创建、修改、插入、删除表等 *** 作,这些表的 *** 作命令你可以到网上找找,不是很难的。一个数据库就相当于一个 Excel 文件,而表则相当于Excel文件的单元格,数据就是存放在表中。

问题三:怎样建立一个简单数据库? 把excel导入数据库,不出现表格嵌套可以使用下面这个方法导入;

思路:

(1)、把excel数据读入到dataset中;

(2)、建立相应结构的数据表格

(3)、把dat畅set中的数据更新到数据表中

问题四:如何用数据库向导创建数据库 Microsoft Access 提供了三种方法来创建 Access 数据库 (Microsoft Access 数据库:数据和对象(如表、查询或窗体)组成的 ,与特定的主题或用途有关。)。

可以使用“数据库向导”来创建数据库。通过该向导可以从内置模板中进行选择,然后对其进行一定程度的自定义。随后,该向导会为数据库创建一组表、查询、窗体和报表,同时还会创建切换面板。表中不含任何数据。如果内置模板中的某个模板非常符合您的要求,请使用该方法。

使用“数据库向导”创建数据库

利用“数据库向导”,用一步 *** 作即可为所选数据库类型创建必需的表、窗体和报表。这是创建数据库的最简单方法。该向导提供了有限的选项来自定义数据库。

单击工具栏上的“新建”。

在“新建文件”任务窗格中,在“模板”下,单击“本机上的模板”。

在“数据库”选项卡上,单击要创建的数据库类型的图标,然后单击“确定”。

在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。

按照“数据库向导”的指导进行 *** 作。

如果向导未启动

这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 40 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 40 SP8 或更高版本,Access 才能完全发挥作用。

有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 40 SP8 或更高版本。

有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式。

注释 不能使用“数据库向导”向已有的数据库中添加新的表、窗体或报表。

如果正在使用 Access 2003,可以在 中搜索 Access 模板。下载模板是创建数据库的最快方式。如果您找到了非常符合要求的模板,请使用该方法。模板是一个包含表、查询、窗体和报表的 Access 数据库文件 (mdb)。表中不含任何数据。打开数据库后,可以自定义数据库和对象。

使用模板创建数据库

这是创建数据库的最快方式。如果能找到并使用与您的要求非常接近的模板,则此方法效果最佳。

在工具栏上单击“新建”。

在“新建文件”任务窗格中,在“模板”下,搜索特定的模板,或单击“Office Online 模板”找到合适的模板。

找到需要的 Access 模板,然后单击“下载”。

如果要基于自己的设计创建数据库,请先创建一个空数据库,然后再分别添加表、窗体、报表及其他对象。这是最灵活的方法,但需要分别定义每一个数据库元素。

不使用“数据库向导”创建空数据库

单击工具栏上的“新建”。

在“新建文件”任务窗格中的“新建”下,单击“空数据库”。

在“文件新建数据库”对话框中,指定数据库的名称和位置,然后单击“创建”。

然后将出现“数据库”窗口 (数据库窗口:在打开 Access 数据库或 Access 项目时出现的窗口。它显示用于新建数据库对象和打开现有对象的快捷方式。),现在便可以在数据库中创建所需的对象 (数据库对象:Access 数据库包含诸如表、查询、窗体、报表、页、宏和模块等对象;Access 项目包含诸如窗体、报表、页、宏和模块等对象。)。>>

问题五:怎样在mysql中创建数据库 是这句:创建一个数据库MYSQLDATA

mysql> CREATE DATABASE MYSQLDATA;

基本 *** 作:MySQL中新建用户,新建数据库,用户授权,删除用户,修改密码的相关 *** 作测试环境:WIN32 mysql5045注:本 *** 作是在WIN命令提示符下,phpMyAdmin同样适用。

用户:phplamp 用户数据库:phplampDB1新建用户。登录MYSQL

@>mysql -u root -p

@>密码

创建用户

mysql> insert into mysqluser(Host,User,Password) values(localhost,phplamp,password(1234));

刷新系统权限表

mysql>flush privileges;

这样就创建了一个名为:phplamp 密码为:1234 的用户。然后登录一下。mysql>exit;

@>mysql -u phplamp -p

@>输入密码

mysql>登录成功2为用户授权。登录MYSQL(有ROOT权限)。我里我以ROOT身份登录

@>mysql -u root -p

@>密码

首先为用户创建一个数据库(phplampDB)

mysql>create database phplampDB;

授权phplamp用户拥有phplamp数据库的所有权限。

>grant all privileges on phplampDB to identified by '1234';

刷新系统权限表

mysql>flush privileges;

mysql>其它 *** 作/

如果想指定部分权限给一用户,可以这样来写:

mysql>grant select,update on phplampDB to identified by '1234';

刷新系统权限表。

mysql>flush privileges;

/3删除用户。@>mysql -u root -p

@>密码

mysql>DELETE FROM user WHERE User=phplamp and Host=localhost;

mysql>flush privileges;

删除用户的数据库

mysql>drop database phplampDB;4修改指定用户密码。@>mysql -u root -p

@>密码

mysql>update mysqluser set password=password('新密码') where User=phplamp and Host=localhost;

mysql>flush privileges;5列出所有数据库mysql>show database;6切换数据库mysql>use '数据库名';7列出所有表mysql>show t>>

问题六:怎么创建数据库连接 方法一、通过编写代码来连接数据库

1定义连接字符串。Data Source=服务器;Initial Catalog=数据库名;User ID=用户名;Pwd=密码 如:Data Source=IDEA-PC\SQLEXPRESS;Initial Catalog=student;User ID=sa;

2创建Connection对象。 SqlConnection sqlconnection1=new SqlConnection(constring);

constring为连接字符串。

3打开与数据库的链接。 Sqlconnection1Open();

4这时数据库就连接成功,可以 *** 作数据库了。

方法二、通过拖拽形式建立数据库连接

1打开视图-->服务器资源管理器。

2右键点就数据连接,选择添加连接。

3选择服务器名(先刷新一下)-->登陆到服务器身份验证形式-->选择一个数据库名-->测试链接-->确定(如果测试链接成功的话)。

4这是建立数据库连接就成功了,可以使用了。

问题七:sqlserver 下怎么建立数据库 怎么建表 方法/步骤

1

首先我们打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;

2

开始连接SQL SERVER服务器,就是我们装好的SQL SERVER 服务器;

3

右击数据库,选择第一个,新建一个数据库;

4

填写数据库的名称,下面是设置自动增长的,一般不用管,默认

5

点击确定后就可以生成一个数据库,此时里面是没有表的;

6

右击表新建一个表,填写你要的字段名称

7

填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;

或者

create database stuDB

on primary -- 默认就属于primary文件组,可省略

(

/--数据文件的具体描述--/

name='stuDB_data', -- 主数据文件的逻辑名称

filename='D:\stuDB_datamdf', -- 主数据文件的物理名称

size=5mb, --主数据文件的初始大小

maxsize=100mb, -- 主数据文件增长的最大值

filegrowth=15%--主数据文件的增长率

)

log on

(

/--日志文件的具体描述,各参数含义同上--/

name='stuDB_log',

filename='D:\stuDB_logldf',

size=2mb,

filegrowth=1mb

)

问题八:oracle数据库怎么创建新用户? 在CRT中进入oracle --连接sqlplus

按照下面写完代码直接复制进去回车就行了

---建立用户代码为:CREATE USER 用户名字 PROFILE DEFAULT IDENTIFIED BY 密码 DEFAULT TABLESPACE 指定表空间名字 TEMPORARY TABLESPACE 临时表空间 ACCOUNT UNLOCK;

---赋权

begin

EXECUTE IMMEDIATE 'GRA�T SELECT ANY DICTIONARY TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER SYSTEM TO 用户名';

EXECUTE IMMEDIATE 'GRANT ALTER ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CONNECT TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY INDEX TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE PUBLIC DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE ANY VIEW TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE PUBLIC SYNONYM TO 用户名';

EXECUTE IMMEDIATE 'GRANT CREATE TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DELETE ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP PUBLIC DATABASE LINK TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY TRIGGER TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY INDEX TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY PROCEDURE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY TABLE TO 用户名';

EXECUTE IMMEDIATE 'GRANT DROP ANY VIEW TO 用户名';

>>

问题九:如何创建数据库 1、通过向导建立和使用数据库

第一步:选择服务视图,然后展开DataBase(数据库节点),右键点击JavaDB

启动服务器

2、在右键单击JavaDB,选择创建数据库

3、在d出的对话框中填写相应的名称,写完后点击确定完成的数据的创建。

例如:学生的数据库,一个老师教一个班

学生表里面有个教师ID字段,这个字段和老师表的教师ID字段就是多对一的关系,反过来就是一对多的关系,

Access:在有这两个表的数据库中,点击工具栏上的关系按钮,把老师表的教师ID字段拖拽到学生表的教师ID字段,并选择“实施参照完整性”这样关系就建立完成了。在老师表教师ID字段旁边会出现1,学生表教师ID字段旁边会出现无穷大,表示一对多关系

SQL

Server

Microsoft(微软)

的数据产品,它的易用性强!

Oracle

Oracle(甲骨文)公司的数据产品!号称世界上最好的数据系统!

DB2

是IBM公司的产品,在全球500强的企业中有80%是用DB2作为数据库平台的!

关系模型数据库的优点:

1、关系模型和格式化模型不同,它是简历在严格的数学概念的基础上的。

2、关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据库的检索和更新结果也是关系(即表)。所以其数据结构简单、清晰,用户易懂易用。

3、关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。

关系模型数据库的缺点:

1、由于存取路径岛屿用户是隐蔽的,查询效率往往不如格式化数据模型。

2、为了提高性能,数据库管理系统必须到用户的查询请求进行优化,因此增加了开发数据库管理系统的难度。

扩展资料:

其他数据库的优缺点:

层次数据库的优点:

1、数据结构比较简单清晰。

2、层次数据库的查询效率高。因为层次模型中记录之间的联系用有向边表示,这种练习在DBMS中常常用指针来实现,因此这种练习也就是记录之间的存取路径。当药存取某个节点的记录值,DBMS就沿着这一条路径很快找到该记录值,所以层次数据库的性能优于关系数据库,不低于网状数据库。

3、层次数据模型提供了良好的完整性支持。

层次数据库的缺点:

1、现实世界中很多联系都是非层次性的。

2、对插入和产出 *** 作的限制比较多,因此应用程序的编写比较复杂、

3、由于结构严密,层次命令趋于程序化。

以上就是关于什么是关系数据库 带你深入了解关系数据库全部的内容,包括:什么是关系数据库 带你深入了解关系数据库、数据库中如何建立表的参照关系、有FD头像。空间的素材传点给我等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9789837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存