MYSQL——多表设计以及数据库中三种关系模型

大致介绍数据库中三种关系模型

一对多(1:N)

定义: 一个实体可以与另一个实体的多个实例相关联,而后者只能与前者的一个实例相关联。

例子: 学生和课程的关系。

  • 学生(1):每个学生可以选修多门课程。
  • 课程(N):每门课程可以被多个学生选修。

数据库表结构:

  • 学生表(Students):包含学生ID、姓名等字段。
  • 课程表(Courses):包含课程ID、课程名称等字段。
  • 选课表(Enrollments):包含学生ID和课程ID,表示学生选修了哪些课程。

多对多(M:N)

定义: 两个实体之间存在多对多的关系,即一个实体的实例可以与另一个实体的多个实例相关联,反之亦然。

例子: 学生和课程的关系(与一对多的例子相同,但理解不同)。

  • 学生(M):多个学生可以选修同一门课程。
  • 课程(N):一门课程可以被多个学生选修。

数据库表结构:

  • 学生表(Students):包含学生ID、姓名等字段。
  • 课程表(Courses):包含课程ID、课程名称等字段。
  • 选课表(Enrollments):包含学生ID和课程ID,作为关联表,表示学生和课程之间的多对多关系。

一对一(1:1)

定义: 一个实体的实例只能与另一个实体的一个实例相关联,反之亦然。

例子: 用户和用户详细信息的关系。

  • 用户(1):每个用户有一个对应的详细信息记录。
  • 详细信息(1):每个详细信息记录对应一个用户。

数据库表结构:

  • 用户表(Users):包含用户ID、用户名等字段。
  • 用户详细信息表(UserDetails):包含用户ID和用户的详细信息,如地址、电话等。

一对多 

2b2441ca66744c7180c592b2cff391b9.png

外键约束:是一个表中的字段(或字段组合)与另一个表中的主键(或唯一键)之间的关系。它确保了在外键字段中输入的数据在所关联的主表中是存在的,从而防止无效或孤立的数据记录。

外键语法

创建表时指定外键

create table 表名 ( 字段名 数据类型, ... [constraint] 外键名 foreign key (外键字段名) references 主表(字段名) );

在表创建后添加外键

alter table 表名 add constraint 外键名 foreign key (外键字段名) references 主表(字段名);

外键约束


物理外键

  • 概念:使用 foreign key 定义外键关联另外一张表。
  • 缺点:影响增、删、改的效率(需要检查外键关系)。仅用于单节点数据库,不适用与分布式、集群场景。容易引发数据库的死锁问题,消耗性能。(就是如果子表里没有任何一个对象的物理外键关联父表里的某一个对象,那么父表中才可以删除那个对象)

逻辑外键(推荐

  • 概念:在业务层逻辑中,解决外键关联。
  • 通过逻辑外键,就可以很方便的解决上述问题。

一对一

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

多对多

相关案例 

关系分析

分析菜品、套餐和相关分类之间的关系,关键数据库的关系模型,再看要额外建表吗。

 

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

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

相关文章

OpenCV和Qt坐标系不一致问题

“ OpenCV和QT坐标系导致绘图精度下降问题。” OpenCV和Qt常用的坐标系都是笛卡尔坐标系,但是细微处有些不同。 01 — OpenCV坐标系 OpenCV是图像处理库,是以图像像素为一个坐标位置,即一个像素对应一个坐标,所以其坐标系也叫图像…

实验四:构建园区网(OSPF 动态路由)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…

《剖析 Spring 原理:深入源码的旅程(二)》

六、Spring 的 Bean 注入与装配 Spring 的 Bean 注入与装配的方式有很多种,可以通过 xml、get set 方式、构造函数或者注解等。简单易用的方式就是使用 Spring 的注解,Spring 提供了大量的注解方式,如 Autowired、Qualifier 等。Spring 还支持…

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…

CSRF保护--laravel进阶篇

laravel对csrf非常重视,专门针对csrf作出了很多的保护。如果您是刚刚接触laravel的路由不久,那么您可能对于web.php路由文件的post请求很疑惑,因为get请求很顺利,而post请求则可能会遭遇失败。其中一个失败的原因是由于laravel的c…

jupyter notebook的 markdown相关技巧

目录 1 先选择为markdown类型 2 开关技巧 2.1 运行markdown 2.2 退出markdown显示效果 2.3 注意点:一定要 先选择为markdown类型 3 一些设置技巧 3.1 数学公式 3.2 制表 3.3 目录和列表 3.4 设置各种字体效果:加粗,斜体&#x…

【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中,我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来,将开启一个新的阶段&#…

redis工程实战介绍(含面试题)

文章目录 redis单线程VS多线程面试题**redis是多线程还是单线程,为什么是单线程****聊聊redis的多线程特性和IO多路复用****io多路复用模型****redis如此快的原因** BigKey大批量插入数据测试数据key面试题海量数据里查询某一固定前缀的key如果生产上限值keys * ,fl…

神经网络问题之二:梯度爆炸(Gradient Explosion)

梯度爆炸(Gradient Explosion)是神经网络训练过程中常见的一个问题,它指的是在反向传播过程中,梯度值变得非常大,超出了网络的处理范围,从而导致权重更新变得不稳定甚至不收敛的现象。 一、产生原因 梯度爆…

小杨的N字矩阵c++

题目描述 小杨想要构造一个m*m 的 N 字矩阵( m为奇数),这个矩阵的从左上角到右下角的对角线、第1 列和第m 列都 是半角加号 ,其余都是半角减号 - 。例如,一个 5*5 的 N 字矩阵如下: --- -- -- -- --- 请…

2024 年企业中的生成式 AI 现状

2024: The State of Generative AI in the Enterprise - Menlo Ventures 企业 AI 格局正在被实时改写。随着试点(Pilot)让位于生产(Production),我们对 600 名美国企业 IT 决策者进行了调查,以揭示新出现的…

Ubuntu24虚拟机-gnome-boxes

推荐使用gnome-boxes, virtualbox构建失败,multipass需要开启防火墙 sudo apt install gnome-boxes创建完毕~

Haystack 的开源开发 LLM 应用设计框架

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

leetcode 919.完全二叉树插入器

1.题目要求: 完全二叉树 是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。设计一种算法,将一个新节点插入到一棵完全二叉树中,并在…

提升性能测试效率与准确性:深入解析JMeter中的各类定时器

在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

亚信安全发布《2024年第三季度网络安全威胁报告》

《亚信安全2024年第三季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第三季度的网络攻击威胁,目的是提供一个准确和直观的终端威胁感知。帮助用户更好地识别网络安全风险,并采取有效的防…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…

利用c语言详细介绍下选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它是每次选出最小或者最大的元素放在开头或者结尾位置(采用升序的方式),最终完成列表排序的算法。 一、图文介绍 我们还是使用数组【10,5,3…

candence: 非金属化孔制作

非金属化孔制作 以下面这个RJ45接口为例 1、打开pad designer 只需要设置开始、结束层即可。 保存 来直观看下非金属化孔和金属化孔的区别: