多表设计(一对多、一对一、多对多)

news/2025/3/9 14:51:06/文章来源:https://www.cnblogs.com/jfp1/p/18760741

在数据库设计中,理解和正确应用关系映射是至关重要的,这有助于确保数据组织和管理的效率。在关系型数据库如MySQL中,常见的关系映射类型包括一对多、一对一和多对多。接下来,我们深入探討这些关系类型及其在数据库设计中的应用。

一对多关系

一对多关系是最常见的数据模型关系之一。在这种关系中,一个记录在一个表中对应另一个表中的多个记录。比如一个分类对应多个产品,一个部门有多个员工。

设计一对多关系时,通常在“多”这一侧的表中添加一个外键字段,这个外键指向“一”这一侧的表中的唯一标识字段,通常是主键。例如:

CREATE TABLE Departments (DepartmentID INT PRIMARY KEY,DepartmentName VARCHAR(100)
);CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,Name VARCHAR(100),DepartmentID INT,FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
 
 

在上述例子中,Employees表通过 DepartmentID建立了与 Departments的一对多关系。

一对一关系

一对一关系是指两个表中的一个记录仅与另一个表中的一个记录相关联。例如,一个用户和他的用户配置信息。

在设计一对一关系时,你可以将一个表的主键设为另一个表的外键。通常还会在外键上设置唯一性约束,以保证一对一的关系。例如:

CREATE TABLE Users (UserID INT PRIMARY KEY,UserName VARCHAR(100),Password VARCHAR(100)
);CREATE TABLE UserProfiles (UserProfileID INT PRIMARY KEY,UserID INT UNIQUE,BirthDate DATE,Photo VARCHAR(255),FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
 
 

上述设计中,每个 Users记录有一个与之对应的 UserProfiles记录。

多对多关系

多对多关系是指一个表中的记录可以与另一个表中的多个记录相关联,反之亦然。比如,学生和课程的关系,一个学生可以选多门课程,同一门课程也可以被多个学生选择。

由于关系型数据库表结构的限制,多对多关系通常需要通过第三张表(关联表或连接表)来实现。例如:

CREATE TABLE Students (StudentID INT PRIMARY KEY,StudentName VARCHAR(100)
);CREATE TABLE Courses (CourseID INT PRIMARY KEY,CourseName VARCHAR(100)
);CREATE TABLE StudentCourses (StudentID INT,CourseID INT,PRIMARY KEY (StudentID, CourseID),FOREIGN KEY (StudentID) REFERENCES Students(StudentID),FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
 
 

在上述的多对多关系设计中,StudentCourses作为关联表,包含 Students和 Courses表的外键,并共同作为主键来确保唯一性。

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

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

相关文章

ChatBI≠NL2SQL:关于问数,聊聊我踩过的坑和一点感悟

"如果说数据是新时代的石油,智能问数就是能让普通人也能操作的智能钻井平台。"这里是**AI粉嫩特攻队!** ,这段时间真的太忙了,不过放心,关于从零打造AI工具的coze实操下篇正在进行中。今天,我们先聊聊另一个很热闹的主题——ChatBI。 还记得那些陷入Excel地狱的…

DP dynamic programming

DP (Dynamic Programming)动态规划常用模型 背包 01背包问题描述:有N个物体,容量为v的背包,每个物品有两个属性体积V和价值W 每件物品只能用一次 背包能装得下的情况下,背包里的价值最大是多少? 完全背包 每件物品有无限个多重背包 每个物品最多有si个 分组背包 物品…

普通人别老想搞独立游戏开发,先做小产品试试吧

前段时间和几个老朋友吃饭,有个老哥酒喝多人给我说他一直有一个梦想,就说做一款独立游戏然后上线,现在准备开始行动了怎么怎么,最后我们扯了很久.....成功劝退了老哥😓。 一、独立游戏开发:英雄主义的代价,普通人的绝路成本高到离谱:从“用爱发电”到“家破人亡”人力…

PTE Hook及x64分页机制的研究

什么是PTE Hook 常规的inlineHook思路是直接修改目标函数的代码,使其先执行我们自己的函数,再跳转回来执行原函数。这种Hook是全局的,即Windows中每一个进程一旦调用被Hook的函数,就会受到我们的影响,也很容易被PatchGuard检查到。 因此提出一种新的Hook思路,隔离具体进程…

.net core/IIS/Kestrel 大文件上传大小设置

MultipartBodyLengthLimit 设置每个多部分正文的长度限制。 分析超出此限制的窗体部分时,会引发 InvalidDataException。 默认值为 134,217,728 (128 MB)。 使用 MultipartBodyLengthLimit 中的 Startup.ConfigureServices 设置自定义此限制:public void ConfigureServices(I…

RHEL8操作系统安装方法

目录第一步:打开VMware软件,创建我们的虚拟机(也就是创建一台虚拟的电脑)第二步 载入rhel8版本的iso文件,进行操作系统的安装 第一步:打开VMware软件,创建我们的虚拟机(也就是创建一台虚拟的电脑)说明:这里使用的是NAT网络模式,可以上网,这三种网络的模式讲解可以看…

关于USB声卡导致windows无法自动关闭屏幕或休眠的案例

问题描述:本人买了一台漫步者S880MKII使用自带的type-C线插到笔记本上后,win11系统的超时息屏和超时睡眠功能失效。解决方法:打开设备管理器(图1) 找到以下输出设备,点击事件查看到类似“VID_20B1”信息的设备 (图2) 禁用设备(图3)至此,睡眠功能恢复正常。 注:有副…

P1219 [USACO1.5] 八皇后 Checker Challenge

题目描述 一个如下的 $6 \times 6$ 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列 $2\ 4\ 6\ 1\ 3\ 5$ 来描述,第 $i$ 个数字表示在第 $i$ 行的相应位置有一个棋子,…

专业代加工公司预览-芯晨微纳(河南)光电科技有限公司

一提“代加工”,很多人不自觉的会有几个误区,认为代工就是粗制滥造、没有技术创新,夹缝中求生存。 实际上,代加工也属于技术密集型、设备密集型产业,能为各种企业解决“无设备、无技术、无资金、与工人”等诸多问题,配合企业完成各种验证和测试,称得上企业的最大帮手。 …

JavaWeb学习(八)

JavaWeb学习(八):Web后端开发 —— Spring 目录JavaWeb学习(八):Web后端开发 —— Spring概念SpringBootWeb 快速入门 本文为个人学习记录,内容学习自 黑马程序员概念Spring 是全世界最流行的 Java 框架,它使得 Java 程序更快、更方便、更安全 Spring 提供了多个子项目…

P3629 [APIO2010] 巡逻

P3629 [APIO2010] 巡逻 看题解大佬们都用数学推理求两遍直径的方法,然而萌新并不会这么高级的方式,只能大力分讨了。 思路 对于 \(k=1\) 的情况,加上一条边时,树上出现了一条环且长为 \(S\),环上的原路径都可以少走一遍,再算上新路径要走一遍。此时答案为 \(2 \times (n-…