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

总结:

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

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

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

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


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

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

相关文章

数据结构【DS】树与二叉树的应用

哈夫曼树 树的带权路径长度最小的二叉树WPL 路径长度【边数】 * 结点权值n个叶结点的哈夫曼树共有 2n-1 个结点 哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树对同一组权值,可能存在不同构的多棵哈夫曼树,但树的带权路径长度最小且唯一哈夫曼树…

Java贪吃蛇小游戏

Java贪吃蛇小游戏 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.LinkedList; import java.util.Random;publi…

C语言——操作符详解

前言:这篇文章主要讲解一下C语言中常见的操作符的使用,做一下整理,便于日后回顾,同时也希望能帮助到大家。 🎬个人简介:努力学习ing 📝CSDN主页 愚润求学 🌄每日鸡汤:念…

大数据的技术运用:探索未来的无限可能性

随着科技的不断进步和社会信息的快速增长,大数据已成为一个热门话题。本文将探讨大数据技术在多个领域的应用,以及它对未来的影响和无限可能性。 导言 在过去的几十年里,大数据技术取得了惊人的发展,它不仅改变了企业的经营方式&a…

大模型LLM 在线量化;GPTQ\AWQ量化

1、大模型LLM 在线量化 参考:https://www.cnblogs.com/bruceleely/p/17348782.html ##8bit model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half(

开源与闭源:数字化时代的创新与合作之争

引言: 在数字化时代,开源与闭源软件的辩论一直是技术界的热门话题。特斯拉CEO马斯克最近公开表示,OpenAI不应该闭源,而自家首款聊天机器人将开源。这一表态引发了广泛的讨论和思考。本文将从不同角度探讨开源与闭源软件的优势与劣…

odoo17 web.assets_web.min.js 赏析

odoo17 web.assets_web.min.js 赏析 前文说到,odoo17的前端js做了大量裁剪优化,最终打包成了一个文件assets.web.js 稍微看一下这个文件的结构 web.assets_web.min.js 行 1: /* /web/static/src/module_loader.js */ 行 173: /* /web/static/…

数据中心标签的重要性

布线标签的实施是为了为用户今后的维护和管理带来最大的 便利,提高其管理水平和工作效率,减少网络配置时间,标签标识系统包括三个方面:标识分类及定义,标签和建立文档。 标签、标识的分类有哪些? 数据中心内的每一电缆、光缆、配线设备、端…

解决网络编程中的EOF违反协议问题:requests库与SSL错误案例分析

1. 问题背景 近期,一个用户在使用requests库进行网络编程时遭遇到了一个不寻常的问题,涉及SSL错误,并提示错误消息为SSLError(SSLEOFError(8, uEOF occurred in violation of protocol (_ssl.c:661)),))。该用户表示已经采取了多种方法来解决…

109.firefly-extboot的生成脚本

内核版本: 4.4.194 在firefly的sdk 2.5.1c及以后的版本都是extboot.img(对应表中的extboot) 但是之前的并不是,而且一个boot.img,(对应表中rkboot) rkboot的生成方法可以参考解决linux5.15编…

【数据机构】最小生成树(prim算法)

一.引例 在n个城市之间建设通信网络,至少需要架设多少条通信线路?如果每两个城市之间架设通信线路的造价是不一样的,那么如何设计才能使得总造价最小? 二.生成树与生成森林 生成树:n个顶点的连通图G的生成树是包含G中…

解决 vite 4 开发环境和生产环境打包后空白、配置axios跨域、nginx代理本地后端接口问题

1、解决打包本地无法访问空白 首先是pnpm build 打包后直接在dist访问,是访问不了的,需要开启服务 终端输入 npm install -g serve 然后再输入 serve -s dist 就可以访问了 但要保证 路由模式是:createWebHashHistory 和vite.conffig.j…

【MySQL】MVCC(多版本并发控制)详解

MVCC MVCC概述 MVCC,全称 Multi-Version Concurrency Control ,即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。 MVCC就是在ReadCommitte…

docker 容器

目录 简介 什么是docker 容器和镜像(contalners) 容器和虚拟机 了解docker三个重要概念 (1)image镜像 (2)container容器 (3)repostory仓库 docker的简单使用 安装docker …

车载通信架构 —— 新车载总线类型下(以太网)的通信架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

HTTP四种请求方式,状态码,请求和响应报文

1.get请求 一般用于获取数据请求参数在URL后面请求参数的大小有限制 2.post请求 一般用于修改数据提交的数据在请求体中提交数据的大小没有限制 3.put请求 一般用于添加数据 4.delete请求 一般用于删除数据 5.一次完整的http请求过程 域名解析:使用DNS协议…

如何进行手动脱壳

脱壳的目的就是找到被隐藏起来的OEP(入口点) 这里我一共总结了三种方法,都是些自己的理解希望对你们有用 单步跟踪法 一个程序加了壳后,我们需要找到真正的OEP入口点,先运行,找到假的OEP入口点后&#x…

多参数训练Isolation Forest

如果你要使用两个指标作为入参训练 Isolation Forest 模型,你需要将这两个指标合并成一个特征向量,然后将这个特征向量作为模型的输入。具体来说,你需要将每个数据点的两个指标组合成一个二元组,然后将这些二元组组成一个矩阵&…

SSD主控

《深入浅出SSD》学习中… 文章目录 《深入浅出SSD》学习中.....一、SSD主控二、PCIe和NVMe控制器前端子系统1.PCIe控制器2.NVMe控制器 一、SSD主控 就是类似电脑CPU的东西,在SSD中收取处理Host端的命令,管理NAND闪存 二、PCIe和NVMe控制器前端子系统 主…

AIGC之Stable Diffusion

AIGC是什么? AIGC:Artificial Intelligence Generated Content,生成式人工智能。通俗一点来讲,对AI下达指令任务,通过处理人的自然语言,自动生成图片、视频、音频等等。 Stable Diffusion 官网:https://stablediffusionweb.com/ 介绍:stablediffusionweb.com is an eas…