数据库的多表关系:从入门到熟练

数据库的多表关系

  • 数据库的多表关系及其维护
    • 多表关系
    • 数据库多表关系的维护
      • 一对一表关系
      • 一对多表关系
      • 多对多表关系

阅读指南:
本文章讲述了对于数据库的多表关系,讲述了有哪些关系和这些关系是如何操作和维护的,如果读者感兴趣,后续我们会更新高级的操作在我们的对于数据库教程的合集中,大家可以来很我们一起学习讨论
合集链接:
数据库详细基础教程

数据库的多表关系及其维护

多表关系

多表关系的形成原因:

  • 由于在关系数据库中,数据都是按照类别存储到对应的表结构里面的,同时,表与表之间可以通过主外键来建立联系,所以拆表存储可以减少数据的冗余,并提高数据查询和操作的效率。

  • 又因为拆表存储的原因,我们不仅要掌握单表的查询语法,还需要掌握多表关联的查询语法。

  • 在关系数据库当中,需要提前创建库的结构,所以我们还需要通过分析数据关系在建表的时候添加合理的约束。

多表关系的情况:

  • 一对一:

两个表之间的每行数据都是唯一对应关系,例如:一个员工和其对应的员工档案。

  • 一对多:

一个表关联另一个表多行数据,反方向指关联一行数据。例如:一个作者与多篇文章。

  • 多对多:

两个表中的记录都可以与对方表中的多个记录相关联,例如:学生与课程之间的关系。

数据库多表关系的维护

一对一表关系

特点:

​ 双方的数据行都对应对方至少一条数据;

​ 容易产生冗余;

维护方式:

​ 外键唯一

​ 方案一: 子表的外键和主键融合,两张表公用同一个主键

​ 方案二: 对子表的外键添加唯一约束

示例:

# 一对一: 员工和档案表
CREATE TABLE emp(e_id  INT PRIMARY KEY AUTO_INCREMENT,e_name  VARCHAR(20) NOT NULL,  e_age  INT DEFAULT 18,e_gender  CHAR DEFAULT '男'
);#方案1: 外键直接当主键
CREATE TABLE profile2(e_id  INT PRIMARY KEY,p_address VARCHAR(100) NOT NULL,  p_level  INT  DEFAULT 10,CONSTRAINT s_p_2  FOREIGN KEY(e_id) REFERENCES emp(e_id) 
);#方案2: 正常存在外键,外键添加unique唯一约束
CREATE TABLE profile1(p_id  INT PRIMARY KEY AUTO_INCREMENT,p_address VARCHAR(100) NOT NULL,  p_level  INT  DEFAULT 10,e_id INT UNIQUE ,  # 外键唯一CONSTRAINT s_p_1  FOREIGN KEY(e_id) REFERENCES emp(e_id) 
);

一对多表关系

特点:

​ 主表对应多条子表数据,子表对应主表至多一条数据;

​ 可以解决数据的冗余问题;

维护方式:

​ 外键不唯一

​ 方法:正常的创建子表的外键约束即可,不用唯一就行

示例:

# 一对多: 作者和文章表CREATE TABLE author(a_id  INT PRIMARY KEY AUTO_INCREMENT,a_name  VARCHAR(20) NOT NULL,  a_age  INT DEFAULT 18,a_gender  CHAR DEFAULT '男'
);CREATE TABLE blog(b_id  INT PRIMARY KEY AUTO_INCREMENT,b_title VARCHAR(100) NOT NULL,  b_content VARCHAR(600) NOT NULL,  a_id INT ,  # 外键CONSTRAINT a_b_fk  FOREIGN KEY(a_id) REFERENCES author(a_id) 
);

多对多表关系

特点:

​ 双方数据行都可以对应对方的多条数据;

​ 多对多需要创建中间表建立数据之间的关联;

维护方式:

​ 中间表包含两个外键,主表数据之间间接关联

示例:

# 多对多: 学生和课程表
CREATE TABLE student(s_id  INT PRIMARY KEY AUTO_INCREMENT,s_name  VARCHAR(20) NOT NULL,  s_age  INT DEFAULT 18
);# 中间表
CREATE TABLE student_course(sc_id  INT PRIMARY KEY AUTO_INCREMENT,s_id INT,  c_id  INT,FOREIGN KEY(s_id) REFERENCES student(s_id) ,FOREIGN KEY(c_id) REFERENCES course(c_id) 
);CREATE TABLE course(c_id  INT PRIMARY KEY AUTO_INCREMENT,c_name VARCHAR(10) NOT NULL,  c_teacher  VARCHAR(10) 
);

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

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

相关文章

小阿轩-yx存储引擎MyISAM和InnoDB

小阿轩-yx存储引擎MyISAM和InnoDB 存储引擎概述 什么是存储引擎 是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能使用不同的存储引擎还可以获得特定的功能MySQL…

算法力扣刷题记录六【203移除链表元素】

前言 链表篇,开始。 记录六:力扣【203移除链表元素】 一、数据结构——链表 来源【代码随想录】,总结: (1)线性结构。内存地址不连续,通过指针指向串联一起。 (2)链表类…

【selenium】 元素定位

元素定位 1、 一般元素定位方式2、通过xpath定位2.1 绝对路径定位2.2 利用元素属性定位2.3 层级和属性结合定位2.4 使用逻辑运算符定位 3、通过css定位元素4、通过By 定位元素5、定位一组元素6、浏览器自带的元素辅助定位功能: 1、 一般元素定位方式 示例网页&…

PacBio or Nanopore:测序技术简单对比

前言 在基因组学和生命科学领域,追求知识的旅程不断演变,由揭示DNA和RNA奥秘的技术创新推动。我们熟知的两大测序技术——PacBio和Nanopore,正位于这一领域的前沿。这些由 Pacific Biosciences 和 Oxford Nanopore Technologies 分别开发的先…

qmi8658姿态解算算法

参考的大佬“Mahony姿态解算算法详解_imu标定mahony 算法-CSDN博客”我这里只是为了记录 参考代码https://download.csdn.net/download/gpio_01/89492825 学习中。。。

实力认可!安全狗受聘成为福建省网信系统2024年度网络安全技术支撑单位

6月6日,福建省委网信办组织召开福建省网信系统2024年度网络安全技术支撑单位座谈会。 作为国内云原生安全领导厂商,安全狗也受邀出席此次活动。 省委宣传部副部长、省委网信办主任、省互联网信息办公室主任张远出席会议并颁发支撑单位证书。安全狗凭借出…

c++质数的几种写法

质数的几种写法 c cmath头文件 #include <cmath> 第1种 bool prime(int n){if(n < 2) return false;//2以下的不是质数&#xff0c;不包含2 for(int i 2;i < n;i)if(n % i 0) return false;return true; } 第2种 bool prime(int n){if(n < 2) return fal…

IDEA-远程debug

jar配置 启动jar包时&#xff0c;添加配置参数&#xff1a; 举例&#xff1a;myApp.jar的端口为8088&#xff0c;配置远程debug端口为8099 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:8099 -jar -Xmx3g -Xms3g myApp.jar上述参数中&#xff1a; -age…

App推广新选择:Xinstall专属地址推广,让你的品牌瞬间引爆市场!

在移动互联网时代&#xff0c;App的推广与运营成为了每个开发者必须面对的重要课题。然而&#xff0c;随着市场竞争的日益激烈&#xff0c;如何让自己的App在众多竞争者中脱颖而出&#xff0c;成为了每个开发者最为关注的问题。今天&#xff0c;我们将为大家介绍一款能够帮助你…

Elasticsearch优化索引映射和设置

在Elasticsearch的世界中&#xff0c;优化索引的映射&#xff08;mapping&#xff09;和设置&#xff08;settings&#xff09;对于提高搜索性能、存储效率和系统稳定性至关重要。本文将带您深入了解如何针对Elasticsearch的索引进行优化&#xff0c;帮助您构建更高效、更可靠的…

浅谈Mysql Innodb存储引擎

一、Mysql整体架构 二、MySQL 5.7 支持的存储引擎 类型 描述 MyISAM 拥有较高的插入、查询速度&#xff0c;但不支持事务 InnoDB 5.5版本后Mysql的默认数据库&#xff0c;5.6版本后支持全文索引&#xff0c;事务型数据库的首选引擎&#xff0c;支持ACID事务&#xff0c;支…

23、24年--项目立项管理

选择题、案例题、论文写作都有可能会考,需要会论文写作。 立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可持续性等进行全面科学的综合分析,为项目决策提供客观依据的一种技术经济研究活动。…

基于QT5实现的串口调试助手

代码仅供参考&#xff0c;实际效果是读串口缓冲区&#xff0c;但是老师水平不行&#xff0c;说好像&#xff08;&#xff1f;&#xff09;不能自己读自己&#xff0c;但是由于没有条件测试&#xff0c;后续没有进一步完善 main.cpp #include "widget.h"#include &l…

深入探索Java开发世界:Redis~类型分析大揭秘

文章目录 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘一、数据结构类型二、分布式锁类型三、事物命令类型四、事物三大特性类型 深入探索Java开发世界&#xff1a;Redis~类型分析大揭秘 Redis数据库基础知识&#xff0c;类型知识点梳理~ 一、数据结构类型 Redis是一…

【图像处理】1、使用OpenCV库图像轮廓的检测和绘制

OpenCV (Open Source Computer Vision Library) 是一个用于计算机视觉和图像处理的开源库。它提供了数百种用于图像和视频分析的算法&#xff0c;并被广泛应用于研究和商业领域。OpenCV 支持多种编程语言&#xff0c;包括 C、Python、Java 等&#xff0c;具有跨平台的特性&…

为什么不建议用外键?

在 MySQL 中&#xff0c;有些开发人员建议避免使用外键&#xff08;Foreign Keys&#xff09;&#xff0c;主要原因如下&#xff1a; 性能问题&#xff1a; 外键约束在插入、更新和删除操作时&#xff0c;会导致额外的检查和锁定&#xff0c;从而影响性能。尤其是在大批量数据操…

Vue项目生产环境的打包优化

Vue项目生产环境的打包优化 前言 在这篇文章我们讨论Vue项目生产环境的打包优化&#xff0c;并按步骤展示实际优化过程中的修改和前后对比。 背景 刚开始的打包体积为48.71M 优化 步骤一&#xff1a;删除viser-vue viser-vue底层依赖antv/g2等库一并被删除&#xff0c;…

【selenium 】操作元素

操作元素 元素操作鼠标操作键盘操作 元素操作 元素操作示例清空输入框clear()deiver.find_element_by_id(“username”).clear()输入文字send_keys()deiver.find_element_by_id(“username”).send_keys(‘zs’)元素点击 click()deiver.find_element_by_id(“login”).click()…

【高级篇】MySQL性能监控与故障排查:洞悉与优化(十六)

引言 在深入探讨了InnoDB引擎的内部机制后,我们转向了MySQL性能监控与故障排查的实践领域。这一章节将指导你如何运用一系列强大的监控工具和日志分析技巧,识别并解决数据库中的性能瓶颈和常见故障,为即将到来的MySQL与云环境的融合打下坚实基础。 一. 常用监控工具:透视…

720漫游快速入门

720云全景漫游制作工具自2014年8月上线后&#xff0c;为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务&#xff0c;获得众多创作者的青睐与认可&#xff0c;同时也承载了创作者越来越多的期望&#xff0c;为了给大家提供更灵活多样的功能…