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)

多对多

相关案例 

关系分析

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

 

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

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

相关文章

企业网页设计的安全与数据保护

企业网页设计不仅要考虑美观和功能性,安全与数据保护也是重中之重。在这个信息爆炸的时代,用户的数据隐私和安全问题日益凸显,企业必须采取多种措施来保障用户的信息安全。 首先,**SSL加密**是基础中的基础。通过使用SSL证书&…

观察者模式和订阅模式

观察者模式和订阅模式在概念上是相似的,它们都涉及到一个对象(通常称为“主题”或“发布者”)和多个依赖对象(称为“观察者”或“订阅者”)之间的关系。然而,尽管它们有相似之处,但在某些方面也…

logback动态获取nacos配置

文章目录 前言一、整体思路二、使用bootstrap.yml三、增加环境变量四、pom文件五、logback-spring.xml更改总结 前言 主要是logback动态获取nacos的配置信息,结尾完整代码 项目springcloudnacosplumelog,使用的时候、特别是部署的时候,需要改环境&#…

工具学习_Docker

0. Docker 简介 Docker 是一个开源平台,旨在帮助开发者构建、运行和交付应用程序。它通过容器化技术将应用程序及其所有依赖项打包在一个标准化的单元(即容器)中,使得应用程序在任何环境中都能保持一致的运行效果。Docker 提供了…

基础知识学习上

基础知识学习上 1.关于print1.1 format 方法 2.运算符2.1 除法运算2.2 幂运算 3.条件控制语句3.1 if语句3.2 循环语句 4.复杂数据类型4.1列表4.2字典4.3字符串 5.函数 1.关于print 分隔符 print(1, 2, 3, 4, sep-) print(1, 2, 3, 4, sep。)结尾符 print(1, 2, 3, 4, end?) pr…

无监督跨域目标检测的语义一致性知识转移

Semantic consistency knowledge transfer for unsupervised cross domain object detection 无监督跨域目标检测的语义一致性知识转移 作者: Zichong Chen, Ziying Xia, Xiaochen Li, Junhao Shi, Nyima Tashi, Jian Cheng 所属机构: 电子科技大学信息与通信工程学院&…

AI智能稿件排版系统订单管理系统

在现代制造业和服务行业中,高效的生产流程和精确的订单管理是企业保持竞争优势的核心要素。AI智能稿件排版系统和订单管理系统作为一体化解决方案,以其强大的自动化能力和智能化技术,帮助企业实现排版效率提升、数据格式兼容性增强和生产流程…

Android Google登录接入

官方文献: 1、前期准备: https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hlzh-cn 2、具体开发: 新版 Googl…

论文浅尝 | MindMap:知识图谱提示激发大型语言模型中的思维图(ACL2024)

笔记整理:和东顺,天津大学硕士,研究方向为软件缺陷分析 论文链接:https://aclanthology.org/2024.acl-long.558/ 发表会议:ACL 2024 1. 动机 虽然大语言模型(LLMs)已经在自然语言理解和生成任务…

Spring Cloud Data Flow快速入门Demo

1.什么是Spring Cloud Data Flow? Spring Cloud Data Flow 是一个用于构建和编排数据处理流水线的云原生框架。它提供了一种简化的方式来定义、部署和管理数据处理任务和流应用程序。以下是一些关键特性和组件: 关键特性 流处理: 支持实时数…

C# .NET环境下调用ONNX格式YOLOV8模型问题总结

我的环境是: Visual Studio: 2019 显卡: 一、遇到问题 1、EntryPointNotFoundException:无法在DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点。差了下原因,入口点是启动项中的问题。 原因:之前用yolov7时安装的版本在C…

量子感知机

神经网络类似于人类大脑,是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题,是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子…

AI Large Language Model

AI 的 Large Language model LLM , 大语言模型: 是AI的模型,专门设计用来处理自然语言相关任务。它们通过深度学习和庞大的训练数据集,在理解和生成自然语言文本方面表现出色。常见的 LLM 包括 OpenAI 的 GPT 系列、Google 的 PaLM 和 Meta…

运维团队3D可视化智能机房管理方案

随着信息技术的飞速发展,机房作为信息技术基础设施的核心部分,其管理效率与可视化程度对运维团队的工作质量有着直接影响。本文将介绍一种结合3D可视化技术的机房管理方案,为运维团队提供一种新的视角和工具,以提升机房管理的效率…

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…

111 - Lecture 10

File I/O and GUI with JavaFX 文件输入/输出与JavaFX图形用户界面 一、Overview 1. File I/O (1) learning Java File I/O mechanism (2) writing into and reading from a file 使用文件I/O进行数据读取和…

分享一下arr的意义(c基础)(必看)(牢记)

arr 即数组名 一般指数组首元素地址 在两种情况下不是 1:sizeof(arr) arr指整个数组简单讲解一下strlen与sizeof(c基础)_strzeof在c语言中什么意思-CSDN博客 2:printf("%p",&…

大数据基于Spring Boot的化妆品推荐系统的设计与实现

摘 要 随着大数据时代的到来,人们对于个性化服务的需求越来越高。化妆品推荐系统作为一个认知智能模型段,在为消费者提供更好的购物体验方面发挥了重要作用。本研究基于大数据技术设计了一个高效准确的化妆品推荐系统。通过对海量数据的分析和处理&…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中,中间件(Middleware)是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑,像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用,也可以只在特定页…

在Unity环境中读取Excel配置文件(入门)

使用Excel作为配置的优势 使用Excel作为配置文件有相对普通的文本文档/json等类型的配置文件有一个更好的优点,更易于编辑,更易读.譬如上面的例子,我可以制作一个人员名单,可以记录它们的姓名,年龄等信息,每一行就是一个对象,该表就是一个List. 环境准备 GitHub - ExcelDataR…