<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对应。

总结:

根据上述示例可以发现,多对多关系下,需要创建一张关联表来记录数据。

关联表中的作为外键的字段并非唯一键,而外键关联的其他键则是主键或唯一键。

这与一对多关系的设计类似,外键的值可以重复,但是其取值范围只能被限定在外键关联键已有的值中。

不同的是,多对多关系的表设计中,外键关联语句存在多条。


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux——进程控制

Linux——进程控制 fork()缺页中断 进程终止进程异常exit_exit进程等待waitwaitpidstatusWIFEXITED 多进程等待阻塞等待和非阻塞等待进程替换单进程的进程替换execlexeclpexecvexecle fork() 我们之前是接触过这个函数的,这个函数我们之前是要来创建子进程的函数&a…

生命科学领域 - FAIR原则和如果使数据FAIR化

2016年,《Scientific Data》发表了《科学数据管理和监督的FAIR指导原则》(FAIR Guiding Principles for scientific data management and stewardship)。文章旨在提供指导方针,以提高数字资产的可发现性、可访问性、互操作性和重用…

一些RLHF的平替汇总

卷友们好,我是rumor。 众所周知,RLHF十分玄学且令人望而却步。我听过有的小道消息说提升很大,也有小道消息说效果不明显,究其根本还是系统链路太长自由度太高,不像SFT一样可以通过数据配比、prompt、有限的超参数来可控…

【论文解读】FFHQ-UV:用于3D面部重建的归一化面部UV纹理数据集

【论文解读】FFHQ-UV 论文地址:https://arxiv.org/pdf/2211.13874.pdf 0. 摘要 我们提出了一个大规模的面部UV纹理数据集,其中包含超过50,000张高质量的纹理UV贴图,这些贴图具有均匀的照明、中性的表情和清洁的面部区域,这些都是…

【数据预处理2】数据预处理——数据标准化

数据标准化 1. 什么是标准化?   数据标准化是一个常用的数据预处理操作,目的是将不同规格的数据转换到统一规格或不同分布的数据转换到某个特定范围,以减少规模、特征、分布差异等对模型的影响。这种操作也叫作无量纲化。   除了用作模型…

【【萌新的SOC学习之 VDMA 彩条显示实验之一】】

萌新的SOC学习之 VDMA 彩条显示实验之一 实验任务 : 本章的实验任务是 PS写彩条数据至 DDR3 内存中 然后通过 VDMA IP核 将彩条数据显示在 RGB LCD 液晶屏上 下面是本次实验的系统框图 VDMA 通过 HP接口 与 PS端的 DDR 存储器 进行交互 因为 VDMA 出来的是 str…

【数据预处理3】数据预处理 - 归一化和标准化

处理数据之前,通常会使用一些转换函数将「特征数据」转换成更适合「算法模型」的特征数据。这个过程,也叫数据预处理。 比如,我们在择偶时,有身高、体重、存款三个特征,身高是180、体重是180、存款是180000&#xff1…

SpringBoot 整合 Freemarker

通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。 Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。 Freemarker 模版后缀为 .ftl(FreeMarke…

python算法例10 整数转换为罗马数字

1. 问题描述 给定一个整数,将其转换为罗马数字,要求返回结果的取值范围为1~3999。 2. 问题示例 4→Ⅳ,12→Ⅻ,21→XⅪ,99→XCIX。 3. 代码实现 def int_to_roman(num):val [1000, 900, 500, 400,100, 90, 50, 40…

【DevOps】Git 图文详解(四):Git 使用入门

Git 图文详解(四):Git 使用入门 1.创建仓库2.暂存区 add3.提交 commit 记录4.Git 的 “指针” 引用5.提交的唯一标识 id,HEAD~n 是什么意思?6.比较 diff 1.创建仓库 创建本地仓库的方法有两种: 一种是创建…

(Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序数据说明文档下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平…

Java Swing算术我最棒

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法,即课堂上所介绍的变量、条件语句、循…

vuedraggable拖拽列表设置某一条元素禁止被拖拽

直接上代码 <draggable filter".unDrag"><div class"unDrag">不能拖拽</div><div class"canDrag">可以拖拽</div> </draggable>一、设置filter 在draggable节点的属性filter设置不可拖拽的class名&#…

3D全景视角,足不出户感知真实场景的魅力

近年来&#xff0c;随着科技的快速发展&#xff0c;普通的平面静态视角已经无法满足我们了&#xff0c;不管是视角框架的限制还是片面的环境展示&#xff0c;都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟&#xff0c;3D全景技术的出现为我们提供了全新的视觉体验…

uni-app(1)pages. json和tabBar

第一步 在HBuilderX中新建项目 填写项目名称、确定目录、选择模板、选择Vue版本&#xff1a;3、点击创建 第二步 配置pages.json文件 pages.json是一个非常重要的配置文件&#xff0c;它用于配置小程序的页面路径、窗口表现、导航条样式等信息。 右键点击pages&#xff0c;按…

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…

遗传算法GA-算法原理与算法流程图

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、遗传算法流程图 1.1. 遗传算法流程图 二、遗传算法的思想与机制 2.1 遗传算法的思想 2.2 遗传算法的机制介绍 三、 遗传算法的算法流程 3.1 遗传算法的算法…

PXE高效批量网络装机

目录 一.PXE 1. 系统装机的三种引导方式 2. 系统安装过程 3. 光盘安装相关文件 4. PXE简介 5. 实现过程 6. PXE优点 二.PXE实现过程 1. 实验准备 2. 搭建DHCP服务器 3. 配置TFTP服务器 4. 准备pxelinu.0文件 5. 挂载镜像准备内核、驱动文件 6. 手写配置文件 7. 准…

强烈 推荐 13 个 Web前端在线代码IDE

codesandbox.io&#xff08;国外&#xff0c;提供免费空间&#xff09; 网址&#xff1a;https://codesandbox.io/ CodeSandbox 专注于构建完整的 Web 应用程序&#xff0c;支持多种流行的前端框架和库&#xff0c;例如 React、Vue 和 Angular。它提供了一系列增强的功能&…

springboot项目中获取业务功能的导入数据模板文件

场景: 在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板 一、下载模板示例 1、在项目的…