精华内容
下载资源
问答
  • 一对一的关系举例
    千次阅读 多人点赞
    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语句中最重要的就是找表之间的关系,只有搞清楚各种表之间的联系,才不容易出错;

    这两句口诀再强调一下:

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

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

    更多相关内容
  • 一对一: 一个主键只能对应一个外键 一对多: 一个主键可以对应多个外键 多对一: 多个主键可以对应一个外键 多对多: 一个主键可以对应多个外键 并且 多个主键可以对应一个外键

    原文链接

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

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

    关联映射:一对一

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

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

    关联映射:多对多

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

    展开全文
  • 数据库一对一、一对多、多对多关系

    万次阅读 多人点赞 2018-01-10 15:54:10
    数据库一对一、一对多、多对多...1、一对一关系实例  * 一个人对应一张身份证,一张身份证对应一个人 2、一对多关系实例  * 一个班级拥有多个学生,一个学生只能够属于某个班级 3、多对多实例  * 一个学生可以
    数据库一对一、一对多、多对多关系

         本来数据库一对一、一对多、多对多关系并不复杂,但是最近在理解的时候感觉又感觉多了写新意,所以现在在来总结一下吧
    一、首先给出三种关系的实例
    1、一对一关系实例
       * 一个人对应一张身份证,一张身份证对应一个人
    2、一对多关系实例
       * 一个班级拥有多个学生,一个学生只能够属于某个班级
    3、多对多实例
       * 一个学生可以选修多门课程,一个课程可以被多个学生选修

    二、一对一关系

    一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面

    三、一对多关系


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

    四、多对多关系

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

    四、总结

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


    展开全文
  • 关系型数据库中,通过...一对关系一个班级有很多学生,外键维护在学生的一方,也就是多的一方。(在做页面设计的时候,需要把两个表连接到一块查询信息)建立一个student和clazz表clazz id name1 一班2 二班3 ...

    在关系型数据库中,通过外键将表跟表之间联系在了一起。

    一对多关系

    一个班级有很多学生,外键维护在学生的一方,也就是多的一方。(在做页面设计的时候,需要把两个表连接到一块查询信息)

    建立一个student和clazz表

    clazz                                                      

    id    name

    1       一班

    2       二班

    3        三班

    student           

    id     name      clazz_id

    1       小明            2

    2       小红            3

    3        小张           1

    select s.name,c.name from student as s,clazz as cwhere c.id=s.clazz_id;


            一对一关系。一对一是一对多的特例,外键唯一。在上面的student和clazz表中,假设一个班级只能有一名学生,clazz_id(外键)不能重复。

             多对多关系。

    外键维护在桥表中,不在两个多的任意一方。下面举一个例子更好地说明。

    student           

    id     name      

    1       小明            

    2       小红         

    3        小张   

    课程表  course

    id      name

    101     java

    102      php

    103       c

    学生选课表 sc

    id       course_id      student_id         grade

    1           101                   1                         60

    2            102                 1                        80 

    3             103                 2                       80

    查询id=1的学生的选的课程,名字,分数。

    select s.*,c.name,sc.grade from student as s,clazz as c,sc

    where sc.course_id=c.id

    and   sc.student_id=s.id

    and s.id=1;




    展开全文
  • 展开全部组合关系是指个单位和同一e5a48de588b662616964757a686964616f31333431363030序列的其他单位间的关系,或共现的所有成分的关系处于组合关系的词必须满足一些句法和语义条件。组合关系也称句段关系,可比作...
  • 一对一Ø 一对一是将数据表“垂直切分”,其实是不常见,或不常用的。也就是 A 表的一条记录对应 B 表的一条记录,为什么要这样的设计呢,不是增加了程度的复杂性吗,然而并不一定,举例说明: 1) 一个系统...
  • 数据库实体间有三种关联关系一对一,一对多,多对多。一对一实例:一个学生只有个身份证编号。 一对多实例:一个班级有多个学生。 多对多实例:多对多就是双向一对多,一个学生可以选择多门课,一门课也有多名学生...
  • 进程和程序之间可以形成一对一,一对多,多对一,多对多的关系,分别举例说明在什么情况下会形成这样的关系? 进程的定义 从不同的角度进程可以有不同的定义,比较典型的定义有: (1)进程是程序的一次执行过程。 ...
  • 实体所具有的个属性 用椭圆型表示,并用无向边将其与相应的实体连接起来 关系 实体和实体之间以及实体内部的关系 用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来, ...
  • 1.关系型数据库通过外键关联来建立表与表之间的关系, 2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定  比如 有个学生的数据:  姓名:张三,性别:男...
  • 等价关系举例 相容关系举例 偏序关系举例 等价类的定义 等价关系与等价类的例题 商集的定义 集合中的三种关系 等价关系:设R为定义在集合A上的关系,若R是自反的,对称的,传递的,则R称为等价关系 相容关系...
  • 在任何关系数据库中,第范式(1NF)是对关系模式的基本要求,不满足第范式(1NF)的数据库就不是关系型数据库。 例如,这样是符合的:student(id,name,age,class) 而这样就不符合:student(id,...
  • Spring Data JPA 之 一对一,一对多,多对多 关系映射

    万次阅读 多人点赞 2018-06-10 17:01:10
      一、@OneToOne关系映射 JPA使用@OneToOne来标注一对一... 这里用两种方式描述JPA的一对一关系。 一种是通过外键的方式(一个实体通过外键关联到另一个实体的主键); 另外一种...
  • 、偏序关系 、 二、偏序集 、 三、偏序集示例 ( 大于等于、小于等于、整除 | 有序元素是单个数值 ) 、 四、偏序集示例 2 ( 包含关系 | 有序元素是集合 ) 、 五、偏序集示例 3 ( 加细关系 | 有序元素是集族 )
  • 一个项目对应多个学生 一个学生对应多个项目(多对多关系) ...实现多对多关系,必须要第三表来操作,且它们都属于外键。...一个项目对应一个老师(一对关系) 导师表 项目表
  • 网上购物系统前台的用户共分两类:类是注册用户(正式用户),这类用户有基本的信息,可以自己的信息进行查看与修改,可以随时实现网上购物。当用户在网站所购商品总金额达一定数量,可以根据所购商品总金额数量...
  • 组合关系和聚合关系.

    千次阅读 2020-12-19 12:16:30
    1组合关系和聚合关系浙江广播电视大学章一鸣(2004年10月14日)、组合关系和和聚合关系的提出组合关系和聚合关系是现代语言学中的个基本原理。《语言学纲要》上说:“符号和符号组合起来的关系称为符号的组合关系...
  •  多态就是同个接口,使用不同的实例而执行不同操作,如图所示: 1.1 多态的优点 ①消除类型之间的耦合关系。 ②可替换性。 ③可扩充性。 ④接口性。 ⑤灵活性。 ⑥简化性。 1.2 多态存在的三个必要条件 ①继承。...
  • sql 性能降低 关联关系变得复杂 sql操作工作量增加 数据库数据冗余
  • 、等价关系 、 二、等价关系示例 、 三、等价关系与闭包示例 、
  • 【JPA】 @OneToOne 一对一单向关联注解

    千次阅读 2017-09-15 11:10:32
     生活中的一对一关系举例:人(man) 和 宠物(pet)。前提(一人只养一个宠物)  为什么这个一对一关系是单向的?如果,人养了宠物,那么我们通过“人”就能得到他所拥有的“宠物”的实体。但是,是不是通过...
  • UML类图符号 各种关系说明以及举例

    万次阅读 2016-08-11 15:00:34
    UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。 依赖(Depe
  • json序列化的对象中存在...使用@JsonBackReference标记在有多对一或者多对多关系的属性上即可解决这个问题,举例: @JsonBackReference @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "market_id") privat
  • 、 二元关系 、 二、 二元关系记法 、 三、 A 到 B 的二元关系 、 四、 A 到 B 的二元关系个数 、 五、 A 到 B 的二元关系举例
  • 目前关系数据库有六种范式:第范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 注:本文只讲前三个范式 先看一下下面这样的表(可以对照...
  • MySQL SELECT COUNT 一对多关联查询去重

    千次阅读 2019-09-01 10:40:31
    一对关系时,统计一 的一方数量,这时使用 SELECT COUNT 就容易出现统计数目不准,有重复的现象。 2 问题复现 举例: 有一用户表(user) 和一张 用户图像表(user_photo),用户表与用户图像表属于一...
  • 继承是java面向对象编程技术的块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 ...
  • 关系运算符

    万次阅读 2020-03-18 18:43:44
    程序设计是实际问题解决过程的模拟,常常需要做判断,像“如果这样,我就执行动作A,如果那样,我就执行动作B”,那怎么判断这样那样呢,就需要关系运算符和关系表达式。 关系运算符表达式示例代码: 运行...
  • 数据库 关系模式和关系的区别

    万次阅读 2020-03-07 13:54:17
    定义 ...关系对应一张二维表,二维表就是关系名。 关系模式(Relation Schema) 在二维表中的行定义,即对关系的描述称为关系模式。 一般表示为(属性1,属性2,…,属性n) 例如:老师的关...
  • 存在非主属性码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B 第范式 定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第范式的 那么符合第模式的特点就有 1)有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 323,749
精华内容 129,499
关键字:

一对一的关系举例