SQL:Relationship(关系)

目录

🔗 什么是 Relationship?

三种基本关系类型(基于实体间的关系): 

1. 一对一(One-to-One)

2. 一对多(One-to-Many)

3. 多对多(Many-to-Many)

🔚 总结

ERD 中的关系类型与表示法

1. One

2. Many

3. One and only one (+)

4. Zero or one(0 +)

5. One or many(-)

6. Zero or many(-)

🔗 什么是 Relationship?

关系(Relationship) 在 MySQL 中指的是 表与表之间的关联方式,用来反映现实世界中实体之间的联系。在数据库设计中,我们通过 主键(Primary Key)外键(Foreign Key) 来实现这些关系。

三种基本关系类型(基于实体间的关系): 

1. 一对一(One-to-One)

  • 每一条记录在 A 表中只对应一条 B 表记录,反之亦然。

  • 例子:一个人只有一个护照。

  • 实现方式:在一个表中设置外键,且该字段设为 UNIQUE

CREATE TABLE Person (person_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Passport (passport_id INT PRIMARY KEY,person_id INT UNIQUE,FOREIGN KEY (person_id) REFERENCES Person(person_id)
);

2. 一对多(One-to-Many)

  • A 表的一条记录对应 B 表的多条记录,但 B 表的每条记录只对应 A 表的一条。

  • 例子:一个老师教授多个学生,但一个学生只由一个老师指导。

  • 实现方式:在 “多” 的一方添加外键。

CREATE TABLE Teacher (teacher_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Student (student_id INT PRIMARY KEY,name VARCHAR(100),teacher_id INT,FOREIGN KEY (teacher_id) REFERENCES Teacher(teacher_id)
);

3. 多对多(Many-to-Many)

  • A 表的记录可以与 B 表多条记录关联,反之亦然。

  • 例子:一个学生可以选多门课,一门课也有多个学生。

  • 实现方式:用第三张中间表(交叉表,junction table) 进行关联。

CREATE TABLE Student (student_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE Course (course_id INT PRIMARY KEY,name VARCHAR(100)
);CREATE TABLE StudentCourse (student_id INT,course_id INT,PRIMARY KEY (student_id, course_id),FOREIGN KEY (student_id) REFERENCES Student(student_id),FOREIGN KEY (course_id) REFERENCES Course(course_id)
);

🔚 总结

关系类型特点示例
一对一双方都唯一人与身份证
一对多一方唯一,多方可以重复教师与学生
多对多双方都可以多个学生与课程

ERD 中的关系类型与表示法

ERD 中关系的核心是描述两个实体之间的“基数”(Cardinality)和“可选性”(Optionality)**,也就是:

  • 一对几?

  • 是否必须有这个关系?

 

1. One

  • 含义: 每个实体 A 只关联一个实体 B。

  • 常见形式: 一对一(1:1)

  • ERD 图形符号: 线上通常是直线 + 一竖杠 | 表示 “exactly one”

  • 例子: 每个人有一个身份证号。

2. Many

  • 含义: 每个实体 A 可能关联多个实体 B。

  • 常见形式: 一对多(1:N)或多对多(M:N)

  • ERD 图形符号: 线上是“三叉爪”或者英文 crow's foot 形状 >, 代表 “many”

  • 例子: 一位老师教授多个学生。

3. One and only one+

  • 含义: 实体 A 必须且只能 关联一个实体 B。

  • ERD 符号: 一竖线 |(表示 one)+ 圆点(表示 required)

  • 对应数据库约束: NOT NULL + FOREIGN KEY + UNIQUE

  • 例子: 每个员工必须拥有一个工号。

4. Zero or one0 +

  • 含义: 实体 A 可以没有 也可以有一个 B。

  • ERD 符号: 圆圈 O(表示 optional)+ 竖线 |(表示 one)

  • 对应数据库约束: 外键字段是 NULLABLE

  • 例子: 一个顾客可以没有会员卡,最多只能有一个。

5. One or many-

  • 含义: 实体 A 必须至少有一个 B,可以有多个。

  • ERD 符号: 竖线 |(表示 one)+ 三叉爪 >(表示 many)

  • 对应数据库约束: 不能为 NULL,且是一对多关系

  • 例子: 每个订单必须包含至少一件商品。

6. Zero or many-

  • 含义: 实体 A 可以没有 也可以有多个 B。

  • ERD 符号: 圆圈 O(表示 optional)+ 三叉爪 >(表示 many)

  • 对应数据库约束: 外键字段可空,允许多条记录

  • 例子: 一个顾客可以下 0 个、1 个或多个订单。

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

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

相关文章

php伪协议

PHP 伪协议(PHP Stream Wrapper) PHP 的伪协议(Protocol Wrapper)是一种机制,允许开发者通过统一的文件访问函数(如 file_get_contents、fopen、include 等)访问不同类型的数据源,包…

当DRAM邂逅SSD:新型“DRAM+”存储技术来了!

在当今快速发展的科技领域,数据存储的需求日益增长,对存储设备的性能和可靠性提出了更高的要求。传统DRAM以其高速度著称,但其易失性限制了应用范围;而固态硬盘SSD虽然提供非易失性存储,但在速度上远不及DRAM。 为了解…

org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow...

Spark异常:Kryo serialization failed: Buffer overflow. 1、问题描述 SparkSQL任务报错如下: org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow. Available: 0, required: xxx. To avoid this, increase spark.kryoseri…

编译原理 实验二 词法分析程序自动生成工具实验

文章目录 实验环境的准备实验实验预备知识分析案例所要做的任务实战 实验环境的准备 安装flex 安装MinGW MinGW Installation Manager页面 apply changes 下载比较耗时 只看到了一个文件,复制过去 配置环境变量 使用gcc -v检验是否安装完成 实验 实验预备知识…

BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调

本节代码将使用 transformers 库加载预训练的BERT模型和分词器(Tokenizer),并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…

Python 质数筛选:从入门到优化的 5 种方法

质数(Prime Number)是指只能被 1 和自身整除的自然数,如 2、3、5、7 等。在算法题、密码学或数学计算中,高效生成质数至关重要。 Python 提供了多种方法来实现质数筛选,但不同方法的效率差异巨大。本文从 最基础的方法…

C#MQTT协议服务器与客户端通讯实现(客户端包含断开重连模块)

C#MQTT协议服务器与客户端通讯实现 1 DLL版本2 服务器3 客户端 1 DLL版本 MQTTnet.DLL版本-2.7.5.0 基于比较老的项目中应用的DLL,其他更高版本变化可能较大,谨慎参考。 2 服务器 开启服务器 关闭服务器 绑定事件【客户端连接服务器事件】 绑定事件【客户…

【连载3】基础智能体的进展与挑战综述

基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 2. 认知 人类认知是一种复杂的信息处理系统,它通过多个专门的神经回路协调运行…

Python语言介绍

Python 是一种高级、通用、解释型的编程语言,由 Guido van Rossum 于 1991 年首次发布。其设计哲学强调代码的可读性和简洁性。 Python通过简洁的语法和强大的生态系统,成为当今最受欢迎的编程语言之一。 一、核心特点 Python 是一种解释型、面向对象、…

什么是回表?哪些数据库存在回表?

目录 一、什么是回表1. 回表的核心流程2. 示例说明3. 回表的性能问题4. 总结 二、哪些数据库会有回表1. MySQL(InnoDB)2. Oracle3. 其他数据库(如 SQL Server、PostgreSQL)4. 总结 三、非聚集索引与聚集索引的区别及产生原因1. 聚…

ssh 免密登录服务器(vscode +ssh 免密登录)

每次打开vscode连接服务器都需要输入密码,特别繁琐。 然后自己在网上翻阅了一下教程,发现说的内容比较啰嗦,而且个人感觉非常有误导性倾向。 因此自己直接干脆写一个简便易懂的教程算了。 (以经过本人亲测,真实可靠&am…

基于低空经济的无人机操控与维护实训室解决方案

一、低空经济时代下的无人机人才需求 1.1 低空经济发展趋势与政策机遇 在当前经济与科技飞速发展的大背景下,低空经济作为国家战略性新兴产业,正以迅猛之势崛起,展现出无限的潜力与活力。其应用场景极为广泛,涵盖了物流、安防、…

PyTorch实现二维卷积与边缘检测:从原理到实战

本文通过PyTorch实现二维互相关运算、自定义卷积层,并演示如何通过卷积核检测图像边缘。同时,我们将训练一个卷积核参数,使其能够从数据中学习边缘特征。 1. 二维互相关运算的实现 互相关运算(Cross-Correlation)是卷…

数字政府网络架构建设方案

数字政府网络架构建设方案 一、引言 随着信息技术的快速发展,数字政府建设已成为提升政府治理能力和服务水平的关键。网络架构作为数字政府的核心基础设施,对于保障数据安全、提高服务效率、促进信息共享具有重要意义。本方案旨在为数字政府网络架构建…

Python map函数介绍

在 Python 里,map() 是一个内置函数,其用途是将指定的函数应用于可迭代对象(像列表、元组等)的每个元素,最终返回一个新的迭代器。此迭代器所包含的元素是原可迭代对象中每个元素经过指定函数处理后的结果。map() 函数…

【服务器端表单字符验证】

文章目录 一、实验目的二、核心代码实现三、调试关键问题四、总结 一、实验目的 掌握JSP表单验证在服务器端的实现技术&#xff0c;实现对用户输入字符的非空及长度为5的验证&#xff0c;返回对应提示信息并优化用户交互。 二、核心代码实现 前端表单 <form action"…

dify windos,linux下载安装部署,提供百度云盘地址

dify下载安装 dify1.0.1 windos安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.zip 链接: 百度网盘 请输入提取码 提取码: 1234 dify安装包 linux安装包百度云盘地址 通过网盘分享的文件&#xff1a;dify-1.0.1.tar.gz 链接: 百度网盘 请输入提取码 提取码…

C++ Primer 5e 习题2.5: 指出如下字面量常量的类型

Exercise 2.5: Determine the type of each of the following literals. Explain the differences among the literals in each of the four examples: (a) ‘a’, L’a’, “a”, L"a" (b) 10, 10u, 10L, 10uL, 012, 0xC © 3.14, 3.14f, 3.14L (d) 10, 10u, 10…

CFS 调度器两种调度类型普通调度 和 组调度

在 Linux 的 CFS&#xff08;Completely Fair Scheduler&#xff09; 调度器中&#xff0c;确实存在两种调度类型&#xff1a;普通调度 和 组调度。这两种调度类型分别适用于不同的场景&#xff0c;并通过三个关键维度&#xff08;权重、抢占优先级、最大配额&#xff09;来影响…

AF3 ProteinDataset类的_get_masked_sequence方法解读

AlphaFold3 protein_dataset模块 ProteinDataset 类 _get_masked_sequence 方法属于作用是为需要预测的残基生成掩码。该掩码以二进制张量形式呈现,其中 1 代表需要预测的部分,0 代表其他部分。此方法会依据多个参数来选定要掩码的残基,这些参数包含 mask_whole_chains、mas…