当前位置:Gxlcms > 数据库问题 > 关系型数据库,摘要

关系型数据库,摘要

时间:2021-07-01 10:21:17 帮助过:3人阅读

        此处的不可分割,是指在可分割的情况下必须分割,这是在应用环境中来判断的,当属性是文档时,虽然文档有段落标记,但还是不应该分割。

举例:        

--数据库表中的任何字段都是单一属性的,不可再分
create table aa(id int,NameAge varchar(100)) 
insert aa values(1,‘‘25-‘‘) 
--没有达到第一范式 

create table aa(id int,name varcahr(10),age char(2)) 
insert aa values(1,‘‘25‘‘,‘‘‘‘) 
--达到第一范式

 

  • 第二范式:每个次属性(字段)要完全函数依赖于候选键,或者是主键

        关键词是“完全依赖”,与“部分依赖”或“局部依赖”相对,如果候选键或主键由两个属性组成,非主属性不能只依赖与其中一个或部分属性。

举例:

create table sci( sno int(32),cno int(32),grade int(32),credit int(32),
primary key sno,cno)
课程(cno)1---1学分(credit)
学生(sno)n---n课程(cno)
学生+课程--->分数(grade)
sci
sno cno grade credit
1    1   60     80
2    1    90     80
3   1    70     80
.   .   .      .
.   .   .     .
.    .   .     .
/*
如此以来,学分被大量重复存储,数据冗余
如要某课程学分,则要大量重复操作
如要加新课程,由于sno和cno共同做为主键,则在加入新课程时,必须有人选该课
如某学生某课程结业,则该学生其它课程信息也同时被删除了
总之
这种设计不太好吧,非关键字属性credit仅函数依赖于cno,也就是credit部分依赖组合关键字(sno,cno)而不是完全依赖
解决
分成两个关系模式 sc1(sno,cno,grade),c2(cno,credit)。新关系包括两个关系模式,它们之间通过sc1中的外关键字cno相联系,需要时再进行自然联接,恢复了原来的关系
*/
  • 第三范式:所有非主属性(字段)对任何候选关键字都不存在传递依赖
        关键词是“传递依赖”,如果非主属性通过另一个非主属性依赖主键,则是传递依赖。 举例:
--
S1(SNO,SNAME,DNO,   DNAME, LOCATION)
          学号 姓名   所在系 系名称 系地址 
/*
关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。
*/
/* 
原因:关系中存在传递依赖造成的。
即SNO 1->1 DNO。 而DNO 1->n SNO却不存在,而DNO -> LOCATION存在, 因此关键字 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。
*/
/*
解决目地:每个关系模式中不能留有传递依赖。 
解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION) 
注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系
*/

 

 相关术语:
  • 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
  • 候选键(candidate key):不含有多余属性的超键称为候选键
  • 主键(primary key):用户选作元组标识的一个候选键称为主键
  • 主属性(Prime Attribute):候选键中的属性称为主属性
  • 非主属性(Non-Key Attribute):不包含在任何候选键中的属性称为非主属性。 

关系型数据库,摘要

标签:

人气教程排行