关系数据库如何实现数据之间的联系

关系数据库如何实现数据之间的联系,第1张

笼统点讲的话就是 数据结构,数据 *** 作和数据完整性约束。

关系模型利用二维表来表示实体以及实体之间的关系,每一张二维表又被称为一个关系。二维表中的每一列代表实体或实体间关系的某种属性。二维表中的一行叫做一个元组,是记录类型的实例,代表了某个具体的实体或具体实体间的特定关系

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系

区别:1、视图是已经编译好的sql语句。而表不是

2、视图没有实际的物理记录。而表有。

3、表是内容,视图是窗口

4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改

5、表是内模式,视图是外模式

6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

8、视图的建立和删除只影响视图本身,不影响对应的基本表。

打个比方,简单的说一下数据库和日常生活中内容例子。

数据库- 数据表-行- 列

账簿-账页-行-列

记录可以理解为行,一行称为一个记录,一行里面可能不是一个内容,比如表格有多个列,列就是数据项。 数据记录的和数据项的关系,简单就是表格中行与列的关系。

数据项是数据基本单元。

因为数据库的存储量决定由硬盘存储量决定,而且每一个表可存上亿行记录,所以一般不考虑存储内容多少。

ACCESS数据库中两个表之间的连接关系有内连接和外连接两种

1、内连接:把两个表中数据对应的数据查出来(显示两个表连接字段都有相同值的记录是一对一)

语句 inner join(查找条件中对应的数据,没有数据不列出来)

语法:select from student inner join grade on studentno = gradeno

2、外连接:以某个表为基础把对应数据查出来,有左连接和右连接,是一对多。

2-1、左连接(左表中所有数据,右表中对应数据,即左边一定有数据,右边不一定有)

语法:select from student left join grade on studentno = gradeno

2-2、右连接(右表中所有数据,左表中对应数据,即右边一定有,左边不一定有)

语法:select from student right join grade on studentno = gradeno

第一范式(1NF)

(必须有主键,列不可分)

数据库表中的任何字段都是单一属性的,不可再分

create table aa(id int,NameAge varchar(100))

insert aa values(1,''无限-女'')

没有达到第一范式

create table aa(id int,name varcahr(10),age char(2))

insert aa values(1,''无限'',''女'')

达到第一范式

第二范式(2NF)

数据库表中非关键字段对任一候选关键字段的 都不存在部分函数依赖

(当一个表是复合主键时,非主键的字段不依赖于部分主键(即必须依赖于全部的主键字段))

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相联系,需要时再进行自然联接,恢复了原来的关系

第三范式(3NF)

关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖

例----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。否则两个关系之间失去联系

以上就是关于关系数据库如何实现数据之间的联系全部的内容,包括:关系数据库如何实现数据之间的联系、简述数据库中表与视图的联系与区别、数据库系统中数据项和记录之间的联系关系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存