美文网首页
数据库表与表之间的关系

数据库表与表之间的关系

作者: 行者和他的钢笔 | 来源:发表于2018-09-18 08:40 被阅读16次

1、数据库中表与表之间的关系

表与表之间一般存在三种关系,即一对一,一对多,多对多关系。

(1)一对一

(2)一对多

例如:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆。
分析:这种情况其实也可以采用 一张表,但因为一个人可以拥有多辆汽车,如果采用一张表,会造成冗余信息过多。好的设计方式是,人和车辆分别单独建表,那么如何将两个表关联呢?有个巧妙的方法,在车辆的表中加个外键字段(人的编号)即可。

(思路小结:’建两个表,一’方不动,’多’方添加一个外键字段)

(3)多对多

例如:学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择。
分析:这种方式可以按照类似一对多方式建表,但冗余信息太多,好的方式是实体和关系分离并单独建表,实体表为学生表和课程表,关系表为选修表,其中关系表采用联合主键的方式(由学生表主键和课程表主键组成)建表。


    关联方式
  SELECT student.* FROM student LEFT JOIN sc ON   student.id=sc.sid LEFT JOIN course ON course.id = sc.cid WHERE course.sname IS NULL;
  SELECT course.* FROM course LEFT JOIN sc ON course.id=sc.cid LEFT JOIN student ON student.id = sc.sid WHERE student.sname IS NULL;

2、视图

什么是视图?

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图的好处:

第一点:
使用视图,可以定制用户数据,聚焦特定的数据。

解释:
在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,
采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没
有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视
图,以后他在查询数据时,只需select * from view_caigou 就可以啦。

第二点:使用视图,可以简化数据操作。

解释:我们在使用查询时,在很多时候我们要使用聚合函数,同时还要
显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能
会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我
们只需要select * from view1就可以啦~,是不是很方便呀~

第三点:使用视图,基表中的数据就有了一定的安全性

因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以
将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集
合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改
和删除,可以保证数据的安全性。

第四点:可以合并分离的数据,创建分区视图

随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很
多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务
情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些
数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,
将各分公司的数据合并为一个视图。

以上,就是我认为视图的作用,实际上很多公司都使用视图来查询数据的。

3、join

内连接: 只连接匹配的行
SELECT * from gradeclass gc inner join grade g on gc.grade_id=g.Id,
左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
select * from grade g rigth OUTER JOIN gradeclass g on g.grade_id=gc.Id(这里的outer可以省略)
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
select * from grade g rigth OUTER JOIN gradeclass g on g.grade_id=gc.Id(这里的outer可以省略)
全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
交叉连接: 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配

相关文章

  • 【Java中级】9.0 SSH之Hibernate框架(六)——

    1.0 数据库表与表之间的关系 数据库表与表之间的关系 1.1 一对多关系 什么样关系属于一对多?一个部门对应多个...

  • 关系型数据库的几种设计范式(1NF 2NF 3NF BCNF 4

    关系型数据库可以看做“有多个表,表内的数据之间、表与表之间存在关系”的数据库,每个表都由行列组成,列又称作字段、域...

  • Tornado 数据库_ORM_SQLAlchemy_表关系和简

    在数据库,所谓表关系,只是人为认为的添加上去的表与表之间的关系,只是逻辑上认为的关系,实际上数据库里面的表之间并没...

  • 初识mongodb

    MongoDB 关系型数据库和费关系型数据库 关系型数据库,表和表之间有关系(外键) 非关系型数据,表盒表之间没关...

  • 数据库笔记-SQL表连接

    表操作 创建表 修改表 添加列 删除列 删除表 表连接 关系型数据库,一个表就是数据之间的关系,而表与表的关系连接...

  • 数据库(二)2018-08-24

    1. MySQL是一个关系型数据库, 关系型数据库描述的就是实体与实体之间的关系.聊到实体与实体之间的关系(表与表...

  • 10.MongoDB 介绍与初识

    关系型数据库和非关系型数据库 表就是关系,或者说表与表之间存在关系。 所有的关系型数据库都需需要通过 sql 语言...

  • MongoDB

    关系型数据库和非关系型数据库表就是关系或者说表与表之间存在关系 所有的关系型数据库都需要通过 sql 语言来操作 ...

  • mysql-多表之间的关系

    在关系型数据库中,表与表之间的关系是通过主键与外键来体现的。而表与表之间的关系主要有三种:一对一关系,一对多(多对...

  • Redis--概述和常用命令

    关系型数据库(SQL):Mysql,oracle 特点:数据和数据之间、表和字段之间,表和表之间是存在关系的。 优...

网友评论

      本文标题:数据库表与表之间的关系

      本文链接:https://www.haomeiwen.com/subject/htbypftx.html