数据库(25)——多表关系介绍

在项目开发中,进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,各个表之间的结构基本上分为三种:一对多,多对多,一对一。

一对多

例如,一个学校可以有多个学生,而一个学生对应一个学校

实现:在多的一方建立外键,指向一的一方的主键。

多对多

例如,一个学生可以选修多门课程,一门课程也可以有多名学生。

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两边的主键。

示例:新创建一张course表,使其与之前的user表连接,这中间需要用一张中间表进行连接。

CREATE table course(id int auto_increment primary key comment '主键id',course_name varchar(10) comment '课程名称'
)comment '课程表';
insert into course value (null,'java'),(null,'vue'),(null,'MySQL');

create table student_course(id int auto_increment comment '主键' primary key ,studentid int not null comment '学生id',courseid int not null comment '课程id',constraint fk_courseid foreign key (courseid) references course(id),constraint fk_studentid foreign key (studentid) references user(id)--添加外键
)comment '学生中间表';

 此时已经成功连接上两张表,在DataGrip里可以更直观的看到这些表的联系。

右击中间表点击Diagrams,选择Show Diagram

 

一对一

例如学生与学生信息的关系。

关系:一对一的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率。

实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一(UNIQUE)的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac修改Mysql8.0密码

转载请标明出处:http://blog.csdn.net/donkor_/article/details/139392605 文章目录 前言修改密码Step1:修改my.conf文件Step2:添加配置skip-grant-tablesStep3:重启mysql服务Step4:进入mysqlStep5:刷新权限Step6:修改密码Step7:再次刷新权限Step8:删除/注释 skip-…

DNS域名

DNS域名 DNS是域名系统的简称 域名和ip地址之间的映射关系 互联网中,ip地址是通信的唯一标识 访问网站,域名,ip地址不好记,域名朗朗上口,好记。 域名解析的目的就是为了实现,访问域名就等于访问ip地址…

【Python】 获取当前日期的Python代码解析与应用

标题:Python中获取当前日期的简单指南 基本原理 在Python中,获取当前日期是一个常见的需求,尤其是在处理日志、数据记录和时间相关的任务时。Python提供了多种方式来获取和处理日期和时间,其中最常用的模块是datetime。datetime…

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政按摩线下预约等多场景应用支持H5小程序APP 软件架构 前端:Uniapp-vue2.0 后端:Thinkphp6 前后端分离 前端支持: H5小程序双端APP(安卓苹果) 安装教程 【商业…

学习VUE3——组件(一)

组件注册 分为全局注册和局部注册两种。 全局注册: 在main.js或main.ts中,使用 Vue 应用实例的 .component() 方法,让组件在当前 Vue 应用中全局可用。 import { createApp } from vue import MyComponent from ./App.vueconst app crea…

11、“十四五”大数据产业发展规划

数据是新时代重要的生产要素, 是国家基础性战略资源。 大数据是数据的集合, 以容量大、 类型多、 速度快、 精度准、 价值高为主要特征, 是推动经济转型发展的新动力,是提升政府治理能力的新途径, 是重塑国家竞争优势的新机遇。 大数据产业是以数据生成、 采集、 存储、 加…

QT C++ QTableWidget 表格合并 setSpan 简单例子

这里说的合并指的是单元格,不是表头。span的意思是跨度、宽度、范围。 setSpan函数需要设定行、列、行跨几格,列跨几格。 //函数原型如下 void QTableView::setSpan(int row, i nt column, 、 int rowSpanCount,/*行跨过的格数*/ int columnSpanCount…

【算法无用系列】电影推荐——余弦相似度计算用户相似度原理

【算法无用系列】通过余弦相似度计算电影、用户相似度 话不多说,本文通过电影推荐系统中,基于余弦相似度算法计算出用户相似和电影相似原理。希望可以帮助一些代码不懂的同学一些思路。 记录用户电影评分数据 一般情况来说,会根据用户的行为…

什么是数字化转型?

作者: 峡山老曹 数字神化 ”企业如何实现数字化转型“是摆在现代企业面前一个无法回避的问题,数字化转型的重要性不容忽视,它不仅是企业适应数字化时代的必然要求,更是提升竞争力、实现可持续发展的关键。随着科技的飞速发展和市场…

学会spring boot 的这些技巧,编程瞬间变得简单了,效率也提高了!

在Spring Boot应用中,断言主要用于测试环境中验证代码行为是否符合预期。虽然Spring Boot自身不直接包含断言库,但通常我们会使用JUnit(一个广泛应用于Java的单元测试框架)来进行测试,其中包含了丰富的断言方法来帮助我们进行各种条件验证。下面通过一些具体的示例来详细说…

二叉树的层序遍历-力扣

本题是二叉树的层序遍历,通过一个队列来控制遍历的节点,二叉树每层的节点和上一层入队的节点个数是相同的,根据这一点编写循环条件。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

八、C语言:操作符详解

一、移位操作符 1.1左移操作 左边丢弃,右边补0 1.2右移操作 算数右移:右边丢弃,左边补原符号位 逻辑右移:右边丢弃,左边补0 int main() {int a -1;int b a >> 1;printf("b%d\n",b);return 0; } 原码…

【Linux进程篇】Linux进程管理应用——虚假的shell脚本

W...Y的主页 😊 代码仓库分享💕 前言:我们已经了解了进程的工作原理,并且学习了进程创建、进程终止、进程等待以及进程程序替换。为了更好的巩固这些知识,我们可以创建一个简易的shell命令行。 目录 做一个简易的s…

GAT1399协议分析(六)--校时

一、官方消息定义 DeviceIDType :GA/T1400.1,采集设备、 卡口点位、 采集系统、分析系统、视图库、应用平台等设备编码规则 TimeCorrectModeType: dateTime时间格式: TimeZone:时区,GAT1400里面没有找到具体内容&…

卧式搅拌机:一键自动称重轻松搞定

在现代化工业生产中,G效、精准的设备是提高生产效率、降低生产成本。近年来,卧式搅拌机一键自动称重包装机的出现,无疑为众多行业带来了变革。这种集搅拌、称重、包装于一体的智能化设备,以其G效、便捷、精准的特点,迅…

六轴机器手臂运动控制——直流伺服反馈系统设计(比赛项目计划书+设计总结+硬件+源代码+上位机等)

TW的硬件一直很强,这是难得的硬件创新比赛的优秀作品,资料非常完整理。 硬件设计,源码,项目计划书,甚至包含了事后的复盘总结文档。 是不可多得的好资料。 项目系统框架图 1. 硬件系统框架图 (请以方块图形式呈现) …

C#.net MassTransit和DotNetCore.CAP区别

MassTransit和DotNetCore.CAP对比 https://github.com/MassTransit/MassTransit https://github.com/dotnetcore/CAP MassTransit和DotNetCore.CAP是两种不同的.NET库,它们在核心概念、设计目的和技术实现等方面存在差异。具体分析如下: 核心概念 Mas…

idea的代码没有提交到仓库怎么撤回到本地?

代码已经提交到变更列表但是还没有push推送到仓库上,可以用这个方法 点击日志-右键要撤回的记录-选择撤销提交 撤销的又回到本地变更 当然你只能撤销自己提交的,别人的你撤销不了

python-题库篇-为什么数组下标从0 开始而不是 1

为什么很多编程语言要把 0 作为第一个下标索引,而不是直观的 1 呢? 这个问题 Dijkstra 已经解答过了,没错,就是你知道的 Dijkstra,Dijkstra 最短路径算法,荷兰语全名是 Edsger Wybe Dijkstra,于…

定制高温隧道炉,如何判断质量好坏

在现代工业生产中,高温隧道炉扮演着不可或缺的角色。对于特定工艺要求,如陶瓷烧制、金属热处理等,定制化的高温隧道炉更是不可或缺。然而,面对市场上琳琅满目的产品,如何判断高温隧道炉的质量好坏成为了企业决策者面临…