<MySQL> 如何合理的设计数据库中的表?数据表设计的三种关系
目录
一、表的设计
二、一对一关系
三、一对多关系
四、多对多关系
一、表的设计
数据库设计就是根据需要创建出符合需求的表。
首先根据需求找到体系中的关键实体对象,通常每个实体对象都会有一个表,表中包含了这个实体的相关属性。
再理清楚实体对象间的关系,不同的关系有不同的设计表的方式。
表的三种关系有:
| 关系 | 说明 |
| 一对一的关系 | 表1中一行数据和表2的一行数据一一对应。 |
| 一对多的关系 | 表1中一行数据可以对应表2的多行数据。 |
| 多对多的关系 | 表1中一行数据可以对应表2的多行数据,表二的一行数据同样可以对应表1中的多行数据。 |
二、一对一关系
图示:

示例:
| 语句 | create table register(id int primary key,date datetime); |
| 说明 | 创建表格register,以id作为主键。 |
| 语句 | create table student( stu_id int primary key,name varchar(32),reg_id int unique, foreign key(reg_id) references register(id) ); |
| 说明 | 创建表格student,以stu_id作为主键,reg_id是唯一键, 以reg_id作为外键,与表格register中的id一一对应。 |
| 总结: | 根据上述示例可以发现,一对一关系下,外键和外键关联的其他键通常是主键或唯一键。 |
三、一对多关系
图示:

示例:
| 语句 | create table class(num int primary key,name varchar(32)); |
| 说明 | 创建表格class,以num作为主键。 |
| 语句 | create table student( stu_id int primary key,name varchar(32),class_num int, foreign key(class_num) references class(num) ); |
| 说明 | 创建表格student,以stu_id作为主键,以class_num作为外键,与表格class中的num对应。 |
| 总结: | 根据上述示例可以发现,一对多关系下,外键并不是唯一键,而外键关联的其他键则是主键或唯一键。这代表外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。 |
四、多对多关系
图示:

示例:
| 语句 | create table course(id int primary key,name varchar(32)); |
| 说明 | 创建表格course,以id作为主键。 |
| 语句 | create table student(id int primary key,name varchar(32)); |
| 说明 | 创建表格student,以id作为主键。 |
| 语句 | create table cou_stu( cou_id int,stu_id int foreign key(cou_id) references course(id) foreign key(stu_id) references student(id) ); |
| 说明 | 创建表格cou_stu, 以cou_id作为外键,与表格course中的id对应, 以stu_id作为外键,与表格student中的id对应。 |
| 总结: | 根据上述示例可以发现,多对多关系下,需要创建一张关联表来记录数据。 关联表中的作为外键的字段并非唯一键,而外键关联的其他键则是主键或唯一键。 这与一对多关系的设计类似,外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。 不同的是,多对多关系的表设计中,外键关联语句存在多条。 |
相关文章:
<MySQL> 如何合理的设计数据库中的表?数据表设计的三种关系
目录 一、表的设计 二、一对一关系 三、一对多关系 四、多对多关系 一、表的设计 数据库设计就是根据需要创建出符合需求的表。 首先根据需求找到体系中的关键实体对象,通常每个实体对象都会有一个表,表中包含了这个实体的相关属性。 再理清楚实体对…...
基于操作系统讨论Java线程与进程、浅谈Go的线程与管程
文章目录 操作系统中的进程进程概念进程的状态 Java中的进程Java进程的概念Java进程的特性Java进程的状态Java进程与操作系统进程的通信 操作系统的进程和Java进程的区别联系操作系统进程Java 进程区别和联系 操作系统中的线程动机优点多核编程 Java中的线程定义:特…...
CICD 持续集成与持续交付——jenkins
部署 软件下载:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ [rootcicd2 ~]# rpm -ivh jdk-11.0.15_linux-x64_bin.rpm[rootcicd2 ~]# yum install -y fontconfig[rootcicd2 ~]# rpm -ivh jenkins-2.432-1.1.noarch.rpm启动服务 [rootcicd2 ~]# systemctl…...
【Zabbix】Zabbix Agent 2在Ubuntu/Debian系统上的安装
一、Zabbix Agent 2介绍 Zabbix Agent 2是一款监控软件,由Zabbix SIA开发。Zabbix Agent 2可以提供系统、服务、应用程序和网络设备的监控及性能指标数据收集。它是通过在被监视的主机上运行来获取数据。Zabbix Agent 2可以在Linux、Unix、Windows和MAC平台上运行&…...
浅谈无线测温产品在菲律宾某工厂配电项目的应用
摘要:配电系统是由多种配电设备和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。由于配电系统作为电力系统的一个环节直接面向终端用户,它的完善与否直接关系着广大用户的用电可靠性和用电质量,因而在电力系统中具有…...
软件工程第十一周
面向对象 面向对象编程(Object-Oriented Programming, OOP)不仅仅是一种程序设计方法,它更是一种深刻的软件工程开发思想。这种思想的核心在于通过抽象和封装来模拟现实世界中的对象和概念,以便更好地管理和解决复杂的软件工程问…...
【从入门到起飞】JavaSE—带你了解Map,HashMap,TreeMap的使用方法
🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 🥰欢迎并且感谢大家指出我的问题 文章目录 🌺双列集合的特点🎄Map🍔Ma…...
[Docker]六.Docker自动部署nodejs以及golang项目
一.自动部署nodejs 1.创建node项目相关文件 app.js代码如下: var express require(express);var appexpress();app.get(/,function(req,res){res.send(首页update); }) app.get(/news,function(req,res){res.send(首页); })//docker做端口映射的时候不要指定ip app.listen(30…...
FPC焊点剥离失效分析
一、案例背景 FPC在后续组装过程中,连接器发生脱落。在对同批次的样品进行推力测试后,发现连接器推力有偏小的现象。据此进行失效分析,明确FPC连接器脱落原因。 #1、#2样品连接器脱落连接器脱落;#3样品连接器未脱落;…...
Java爬虫框架下代理使用中的TCP连接池问题及解决方案
引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…...
PostgreSQL 数据定义语言 DDL
文章目录 表创建主键约束非空唯一约束检查约束外键约束默认值约束 触发器表空间构建表空间 视图索引索引的基本概念索引的分类创建索引 物化视图 表创建 PostgreSQL表的构建语句与所有数据库都一样,结构如下,其核心在于构建表时,要指定上一些…...
设计模式-行为型模式-策略模式
一、什么是策略模式 策略模式是一种行为设计模式,它允许在运行时选择算法或行为,并将其封装成独立的对象,使得这些算法或行为可以相互替换,而不影响使用它们的客户端。(ChatGPT生成) 主要组成部分ÿ…...
ResizeObserver观察元素宽度的变化
ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象,它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…...
斐波那契数列,剑指offer,力扣
目录 题目地址: 我们直接看题解吧: 解题方法: 难度分析: 审题目事例提示: 解题思路(动态规划): 代码实现: 补充说明: 代码(优化)&…...
Mac安装CocoaPods
安装HomeBrew 安装 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装失败 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"curl: (28) F…...
APP专项测试方法和工具的使用(测试新手必看)
APP专项测试 1、网络测试 可使用抓包工具辅助网格测试推荐:fiddler,Charles (1)网络切换2G-3G-4G-wifi-网络信号差--无网(2)网络信号弱关注是否出现ANR、crash 2、中断测试 (1)…...
WordPress网站迁移实战经验
前几日,网站服务器到期,换了服务商,就把我的WordPress的网站迁移到本地电脑了。方便以后文章迁移。 本次迁移网站主要经历以下几个步骤。 1.域名转出。 2.备份数据库及网站文件下载。 3.重新搭建WordPress网站。 4.网站文件及数据库导入。 下面详细介绍下每个步骤的操作…...
3D全景视角,足不出户感知真实场景的魅力
近年来,随着科技的快速发展,普通的平面静态视角已经无法满足我们了,不管是视角框架的限制还是片面的环境展示,都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟,3D全景技术的出现为我们提供了全新的视觉体验…...
C编译环境和预处理(非常详细,建议收藏)
C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…...
LeetCode669. Trim a Binary Search Tree
文章目录 一、题目二、题解 一、题目 Given the root of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in [low, high]. Trimming the tree should not change the relative structure of the …...
打破邮件营销壁垒:免费响应式HTML模板的实战指南
打破邮件营销壁垒:免费响应式HTML模板的实战指南 【免费下载链接】email-templates Free HTML email templates for Mailchimp and other emails services 项目地址: https://gitcode.com/gh_mirrors/ema/email-templates 一、邮件营销的隐形痛点与解决方案 …...
Virtuoso-DFF:从原理图到功能测试的全面解析
1. Virtuoso-DFF设计原理全解析 在数字电路设计中,D触发器(DFF)是最基础也最重要的存储单元之一。Virtuoso作为业界领先的集成电路设计工具,其DFF实现方式具有典型性和参考价值。我们先从最基础的结构说起。 一个标准的DFF通常由传…...
如何绕过App Store限制:iOS第三方应用安装的终极指南
如何绕过App Store限制:iOS第三方应用安装的终极指南 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 还在为苹果App Store的严格限制而烦恼吗&…...
如何让AI帮你读完100篇文献,并写出综述的核心内容?
对于每一位科研工作者而言,面对一个新的课题或研究方向,最让人望而生畏的往往不是实验本身,而是前期那如山般堆积的文献调研。当你需要在短时间内读完100篇甚至更多核心文献,并从中提炼出逻辑严密、观点独到的综述核心内容时&…...
零宽度字符隐写术全解析:从Unicode原理到实战检测工具推荐
零宽度字符隐写术全解析:从Unicode原理到实战检测工具推荐 在数字信息安全的隐秘角落,有一种几乎不可见的通信方式正在被安全研究人员和渗透测试工程师频繁使用——零宽度字符隐写术。这种技术允许我们将秘密信息嵌入普通文本中,肉眼无法察觉…...
AMP实战:对抗运动先验在物理驱动角色控制中的风格化应用
1. AMP框架如何革新角色动作控制 想象一下你在玩一款开放世界游戏,主角需要从悬崖边缘精准跳到对面平台。传统动画系统可能会直接播放预设的跳跃动画,但物理引擎计算发现距离不够时,就会出现角色悬空滑行的诡异画面。这正是AMP(Ad…...
Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图
Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图 你是不是也遇到过这样的场景:手头有一个很棒的深度估计模型,比如 Lingbot-Depth-Pretrain-ViTL-14,想用它来为自己的项目生成深度图,却发现…...
MYSQL中 find_in_set() 函数实战:从语法到场景的深度解析
1. 揭开find_in_set()函数的神秘面纱 第一次在项目中看到find_in_set()这个函数时,我也是一头雾水。它看起来和IN操作符很像,但又有明显的不同。经过多次实战应用后,我发现它其实是处理逗号分隔字符串的利器。 这个函数的语法非常简单&#x…...
HunyuanVideo-Foley与Java后端集成:构建高并发音效生成服务
HunyuanVideo-Foley与Java后端集成:构建高并发音效生成服务 1. 场景需求与技术挑战 在线教育平台面临一个共同痛点:海量视频课程需要配乐,但人工配乐成本高、效率低。一个中等规模的平台每月新增课程可能达到上万节,传统音乐制作…...
Notepad2终极指南:轻量级文本编辑器的完整使用教程
Notepad2终极指南:轻量级文本编辑器的完整使用教程 【免费下载链接】notepad2 Notepad2-zufuliu is a light-weight Scintilla based text editor for Windows with syntax highlighting, code folding, auto-completion and API list for many programming languag…...
