精华内容
下载资源
问答
  • 数据库一对一关系举例
    千次阅读 多人点赞
    2022-03-04 10:12:57

    引言

    在数据库中,单表的操作是最简单的,但是在实际业务中最少也有十几张表,并且表与表之间常常相互间联系;

    一对多、一对一、多对多是表与表之间的常见的关系,初学时在多表连接时会纠结如何写对应的Sql语句,下面就分享一些小技巧;

    一对多

    一对多是最基础的表间关系,意思是一张表A中的一条记录可以对应另一张表B中的多条记录另一张表B中的一条记录只能对应一张表A中的一条记录

    举个一对多的例子:

    有两张表,

    表A:学生表student(子表

    id     name   class_id(外键非空:班级id)
    1001    张三      111
    1002    张四      222
    1003    王五      111
    1004    赵六      111
    

    表B:班级表class(父表

    id      name
    111     class1
    222     class2
    

    一个班级对应多个学生,一个学生只能对应一个班级,所以这两个表的关系也就很明确了:

    班级表中的一条记录可以对应学生表的多条数据,学生表中的一条记录只能对应班级表的一条数据;

    查询案例:查询所有姓张的学生的id,name和所在班级name

    SELECT 
    	s.id,s.name,c.name as className
    FROM 
    	student s
    JOIN 
    	class c 
    ON 
    	s.class_id=c.id
    WHERE 
    	s.name LIKE '张%'
    

    在一对多关系中需要注意以下几点:

    • 添加数据时,先添加父表(class)记录,再添加子表(student)记录;(比如增加一个学生而他的班级是class3,父表没有该班级需要先添加)
    • 删除数据时,先删除子表(student)记录,再删除父表(class)记录;(比如删除一个学生且只有他的班级是class2,先删除学生后再删除父表的class2)

    在设计表时,可以遵循以下口诀:

    一对多,两张表,多的表加外键

    解释一下:在一对多的关系中,存在两张表(一张父表一张子表),父表的一条数据对应子表的多条数据,那么子表(多)就需要添加上父表(一)的外键字段

    这样才能将两张表连接起来;

    一对一

    一对一的关系就是一种特殊的多对多的关系,一张表A中的一条记录只能对应另一张表B中的一条记录另一张表B中的一条记录也只能对应一张表A中的一条记录

    例如:

    学生表student:

    id     name
    1001    张三
    1002    张四
    

    学生卡表card:

    id     name
    111    card1
    222    card2
    

    这里的一个学生只能对应一张学生卡,一张学生卡只能对应一个学生,那么学生和学生卡就是一对一的关系;

    一对一设计有两种方案:

    共享主键:(不推荐)

    共享主键就是让学生表的主键和学生卡表的主键一样,那么两张表可以变成这样:

    学生表student
    id     name
    1001    张三
    1002    张四
    
    学生卡表card
    id      name
    1001    card1
    1002    card2
    

    这样学生卡表的id和学生表的id主键相同,这就是主键共享

    查询案例:查询张三的学生卡信息

    SELECT 
    	*
    FROM 
    	card c
    WHERE 
    	id='1001'
    

    注意:

    • 添加数据:先添加先产生的表,后添加后产生的表记录
    • 删除数据:先删除后产生的表记录,再删除先产生的表记录
    • 查询数据:无需进行连接查询

    但是一般在表的设计时尽量避免主键的相同,所以主键共享一般不会去使用,了解即可;

    唯一外键:(外键加一个唯一性约束)

    唯一外键是一对一设计推荐的方法,顾名思义,也是需要给某个表添加外键,但是该外键必须有唯一性约束,通俗来说就是该外键不能有重复;

    假设给学生卡表添加外键:

    学生表student
    id     name
    1001    张三
    1002    张四
    
    学生卡表card
    id      name	stuent_id(设计表时给该字段添加唯一性约束)
    111    card1	 1001
    222    card2	 1002
    

    还是上面的例子:查询张三的学生卡信息

    SELECT 
    	* 
    FROM 
    	card c 
    JOIN 
    	student s 
    ON 
    	c.student_id=s.id 
    WHERE 
    	s.name='张三'
    

    在这里就直接当成一对多使用即可,所以一对一和一对多语法上并没有什么太大区别,只是在外键处加了一个唯一性约束;

    多对多

    多对多的意思是:一张表A中的一条记录可以对应另一张表B中的多条记录另一张表B中的一条记录也可以对应一张表A中的多条记录

    比如:

    学生表student:

    id      name
    1001    张三
    1002    张四
    1003    王五
    1004    赵六
    

    课程表course:

    id     name   
    111    java   
    222    mysql
    

    这两张表就是多对多的关系,因为一个学生可以选择多门课程,一门课程可以被多个学生选择;

    那么这样不论给哪个表添加外键都不行,这时就需要额外创建一个关系表来存放这两张表的id键值:

    学生课程关系表student_course_relation(关系表):

    student_id     course_id
    1001            111
    1001            222
    1002            111
    1002            222
    

    这样就可以分开来看了:

    学生表关系表就是一对多的关系课程表关系表也是一对多的关系

    查询案例:查询所有姓张的学生的id、name和所选课程的name

    SELECT 
    	s.id, s.name, c.name
    FROM
    	student s
    JOIN 
    	student_course_relation scr
    ON 
    	scr.student_id=s.id
    JOIN 
    	course c
    ON 
    	scr.course_id=c.id
    WHERE
    	s.name LIKE '张%'
    

    多对多关系同样注意几点:

    • 添加数据时,先添加父表记录(student,course),再添加子表(student_course_relation)记录
    • 删除数据时,先删除子表记录(student_course_relation),再删除父表记录(student,course)

    在多对多设计表时,可以遵循以下口诀:

    多对多,三张表,关系表加外键

    意思就是当存在多对多的关系时,需要涉及到第三张表关系表的设计,而关系表就是存放了存在多对多关系的两张表的外键;

    总结

    在写sql语句中最重要的就是找表之间的关系,只有搞清楚各种表之间的联系,才不容易出错;

    这两句口诀再强调一下:

    一对多,两张表,多的表加外键

    多对多,三张表,关系表加外键

    更多相关内容
  • 一对一关系实例:每一个中国本土的居民与居民唯一的身份证编号。一个本土居民只有一个身份证编号。‘唯一性’ 一对多关系实例:1.一个母亲可以有很多孩子,一个孩子只有一位亲生母亲。 ​ 2.一个员工有一个...

    实例

    • 一对一关系实例:每一个中国本土的居民与居民唯一的身份证编号。一个本土居民只有一个身份证编号。‘唯一性’

    • 一对多关系实例:1.一个母亲可以有很多孩子,一个孩子只有一位亲生母亲。

      ​ 2.一个员工有一个部门,1个员工关联一个部门,一个部门可以拥有多个员工,但一个员工只能关联一个部门。

    • 多对多关系实例:1.一位老师可以教导多个学生,一个学生可以被多个老师教导。

      ​ 2.一个学生可以选择多门课程,一门课程可以被多个学生选中。

    关系

    一对一关系:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNc6T92m-1651063998486)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427193128549.png)]

    ​ 一对一关系是最简单的关系,在数据库建表时,可以将‘本土居民’表中的主键ID放置到’身份证‘表中;

    ​ 或者将‘身份证’表中的主键ID放置到‘本土居民’类表中。

    ​ 在‘一对一’关系中,‘本土居民’表 和 ‘身份证’表 可以随意指向。

    一对多关系:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oNuQKIGF-1651063998487)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427194127421.png)]

    1.母亲是A端,孩子是多端,结合面向对象来说,A端是母亲,对端就是孩子;

    所以多端拥有A端的属性,即多端中应该放置A端的主键ID,‘孩子’表格中应该放置‘母亲’表中的主键ID。

    一对多(又名多对一),理应将多的那个表当做主表,少的那个表的为次表。

    多对多关系:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bJZ2yETs-1651063998487)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20220427192615354.png)]

    对于多对多的关系,我们需要将它转换成1对多的关系,那我们就需要一张中间表来进行转换,

    这张中间表内存放学生表里面的主键和课程表里面的主键,这是学生与中间表之间是1对多的关系,

    课程与中间表也是1对多的关系。

    学生与课程之间是多对多的关系。

    2.一个班级有若干个老师,一个老师也可以带若干个班级。同理!

    小结:

    1. 在这3种关系中,1对多的关系是最重要的,根据面向对象的思想在建表的时候将某1端的主键放置于多端即可。
    2. 只有明确这3种关系,才能更好的根据项目需求来设置数据库的数据。
    展开全文
  • 数据库一对一、一对多、多对多关系 一、首先给出三种关系的实例 1、一对一关系实例 一个人对应一张身份证,一张身份证对应一个人 2、一对多关系实例 一个班级拥有多个学生,一个学生只能够属于某个班级 3、多对...
    由于最近在学数据库的东西,又想到了大一是老师交的如何通过数据库关系见表,下面就来说一下这三种关系的使用
    

    数据库一对一、一对多、多对多关系

    一、首先给出三种关系的实例

    1、一对一关系实例

    • 一个人对应一张身份证,一张身份证对应一个人

    2、一对多关系实例

    • 一个班级拥有多个学生,一个学生只能够属于某个班级

    3、多对多实例

    • 一个学生可以选修多门课程,一个课程可以被多个学生选修

    二、1.一对一关系
    在这里插入图片描述
    一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面

    2、一对多关系
    在这里插入图片描述

    班级是1端,学生是多端,结合面向对象的思想,1端是父亲,多端是儿子,所以多端具有1端的属性,也就是说多端里面应该放置1端的主键,那么学生表里面应该放置班级表里面的主键

    3、多对多关系

    对于多对多关系,需要转换成1对多关系,那么就需要一张中间表来转换,这张中间表里面需要存放学生表里面的主键和课程表里面的主键,此时学生与中间表示1对多关系,课程与中间表是1对多关系,学生与课程是多对多关系

    三、总结

    总而言之,最重要的关系就是1对多关系,根据面向对象思想在建表的时候将1端主键置于多端即可。

    展开全文
  • 一对一: 一个主键只能对应一个外键 一对多: 一个主键可以对应多个外键 多对一: 多个主键可以对应一个外键 多对多: 一个主键可以对应多个外键 并且 多个主键可以对应一个外键

    原文链接

    关联映射:一对多/多对一

    存在最普遍的映射关系,简单来讲就如球员与球队的关系;
    一对多:从球队角度来说一个球队拥有多个球员 即为一对多
    多对一:从球员角度来说多个球员属于一个球队 即为多对一数据表间一对多关系如下图:
    在这里插入图片描述

    关联映射:一对一

    一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。
    数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。

    一对一外键关联,图示如下:
    在这里插入图片描述
    一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系。图示如下:
    在这里插入图片描述

    关联映射:多对多

    多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。
    数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。
    数据表间多对多关系如下图:
    在这里插入图片描述

    展开全文
  • 一对一关系 一对多关系、多对一关系 多对多关系 2、多表关联关系的实现 可以通过添加外键来实现。 2.1 一对一 主键共享 两张表的主键,建立外键约束。 -- 建立一对一关系:一夫一妻 mysql> create table ...
  • 版本一 一、首先给出三种关系的实例 1、一对一关系实例 * 一个人对应一张身份证,一张身份证...一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主...
  • 数据库一对一、一对多、多对多关系

    万次阅读 多人点赞 2018-01-10 15:54:10
    数据库一对一、一对多、多对多关系  本来数据库一对一、一对多、多对多关系并不复杂,但是最近在理解的时候感觉又感觉多了写新意,所以现在在来总结一下吧 一、首先给出三种关系的实例 1、一对一关系实例 ...
  • 一对一关系实例 ***********一个学生对应唯一的身份证号码。 一对多关系实例 ***********一个班级对应多位学生。 多对多关系实例 ***********一位学生可以选多门课程,一门课程也对应多位学生。 一...
  • 数据库一对多、 多对多案例

    千次阅读 2018-08-22 21:21:34
    数据库一对多案例(一个旅游类别对应多个旅游路线) 一个旅游的类别对应多个旅游线路。类别与旅游线路表是属于1对多的关系: #创建一个旅游类别表 CREATE TABLE tab_category( #旅游线路分类主键 cid INT ...
  • 多对多,可以理解为是一对多和多对一的组合;要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式; 例如: 老师表、班级表、课程表,中间表为:课程表; 如果sqlite...
  • 学生表和课程表可以多对多 一个学生可以学多门课程 ...一门课对应一个老师: 一对一 一对多(foreign key): 学生表要关联班级表,多个学生属于一个班级. 班级是被关联的表 创建班级表 create table class...
  • 实现数据库联合操作,初学labview数据库的新手帮助较大
  • 数据库而言,实体往往指某类事物的集合。 把每一类数据对象的个体称为实体。 数据库中:E-R图也称实体-联系图(Entity Relationship Diagram),提供了...数据库一对一的实现方式: (1)唯一外键方式:在A和B任...
  • 第二类是扩充的关系操作:投影(对关系的垂直分割)、选择(对关系的水平分割)、连接和自然连接(关系的结合)。  五个基本操作:  举例说明:  两个关系如下:  并:  差:  ...
  • 1.关系数据库通过外键关联来建立表与表之间的关系, 2.非关系数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定  比如 有个学生的数据:  姓名:张三,性别:男...
  • 数据库实体间有三种关联关系一对一,一对多,多对多。一对一实例:一个学生只有个身份证编号。 一对多实例:一个班级有多个学生。 多对多实例:多对多就是双向一对多,一个学生可以选择多门课,一门课也有多名学生...
  • 原文:http://blog.csdn.net/lm709409753/article/details/48440401数据库实体间有三种对应关系一对一,一对多,多对多。一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。一对多...
  • [数据库基础篇]——关系数据库

    千次阅读 2022-03-11 10:29:15
    数据模型三要素:数据结构、数据操作、完整性约束 关系模型的三要素:关系数据结构、关系操作、完整性约束 ...关系也是个二维表,表的每行对应个元组,任意的两个元组不能完全相同;表的每列必须来自同
  • 数据库表中一对关系怎么设计?

    千次阅读 2020-10-23 09:42:54
    (一对多:one-to-many) 1) teacher and student. (teacher表:两列id(主键),name。 pupil表:三列:id(主键),name,tid(外键)) 举例: Teacher "qixy" has two students: liyaohua,fuwenlong. Teacher ...
  • 数据库系列(4):关系数据库

    千次阅读 2022-02-17 11:04:37
    在商用数据库应用中,关系数据库已经成为目前主要的数据...其中,关系模型可以简单理解为二维表格模型,于是关系数据库就是由二维表及其之间的关系组成的个数据组织。 我们举例来看,有2个表: course(i
  • 数据库关系代数详解

    万次阅读 多人点赞 2021-02-26 16:35:55
    数据库关系代数 1. 关系代数的运算 1.1 传统的关系运算 传统的关系运算起源于数学的集合论,有下面几种: 笛卡尔积运算 差运算 交运算 并运算 1.2 专门的关系运算 选择 投影 连接 除运算 1.2.1 关系运算中的基础...
  • 以下内容是本人利用网络资料以及课堂学习总结的学习笔记,如有错误欢迎评论区更正。 前言 这是关系实例 域(Domain):组具有相同数据类型的值的集合(如:整数、实数、具有某...三、关系数据库 ...
  • 一对关系 举例:部门和员工的对应关系 : 1. 正过来看,(“1”)一个部门里面可以有多个员工(“n”) 2. 反过来看一一对应:而一个员工只能对应一个部门 由于满足上面两条, 所以一对关系成立, 部门是1 员工是n 策略...
  • 一个项目对应多个学生 一个学生对应多个项目(多对多关系) ...实现多对多关系,必须要第三表来操作,且它们都属于外键。...一个项目对应一个老师(一对关系) 导师表 项目表
  • Django数据库一对多数据关系

    千次阅读 2017-10-10 19:24:08
    本文主要描述Django数据中一对一的数据关系,创建app等配置不再赘述。 Django操作数据库,使用ORM ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的记录时,就像在操作类和对象一样。 ...
  • 数据库关系数据库关系运算

    千次阅读 多人点赞 2020-03-25 11:59:13
    我们学习关系运算的机理,我们理解数据库查询操作非常重要 所以我们进行关系操作时很大程度上需要明白关系操作以及关系之间的逻辑 在我们进行数据库查询操作时,如何规范的使用数据库语言,如何进行选择时能够消除...
  • 关系数据库中实体之间的关系

    千次阅读 2021-01-19 00:07:45
    关系数据库实体间有三种关联关系一对一,一对多,多对多。一对一关系(1:1):如果实体集(表)A 中的每一个实休(就是每行记录),在实体集B中只有一条数据与它对应,反之实体集B 中的每一个实体,在实体A中只有一条...
  • 数据库实体间有三种对应关系一对一,一对多,多对多。一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号。 一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生。 多对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 218,480
精华内容 87,392
热门标签
关键字:

数据库一对一关系举例

友情链接: nfvb.rar