时间: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。否则两个关系之间失去联系 */
相关术语:
关系型数据库,摘要
标签: