外键的基本概念

外键的基本概念

  • 外键(FOREIGN KEY):外键是一个或多个列,其值必须在另一个表中对应列的值中存在。外键用于维护两个表之间的关系,并确保引用的完整性。

外键在示例表结构中的应用

假设外键约束如下:

FOREIGN KEY (user_id) REFERENCES sys_user(id),
FOREIGN KEY (role_id) REFERENCES sys_role(id)

    这意味着 sys_user_role 表中的 user_id 列必须引用 sys_user 表中的 id 列,而 role_id 列必须引用 sys_role 表中的 id 列。

示例表结构的详细解释

用户表(sys_user)
CREATE TABLE sys_user (id BIGINT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,phone VARCHAR(20) UNIQUE,dept_id BIGINT,is_admin BOOLEAN DEFAULT FALSE,FOREIGN KEY (dept_id) REFERENCES sys_dept(id)
);
  • id:用户表的主键,唯一标识每个用户。
  • dept_id:外键,引用 sys_dept 表的 id 列,表示用户所属的部门。
部门表(sys_dept)
CREATE TABLE sys_dept (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL
);
  • id:部门表的主键,唯一标识每个部门。
  • name:部门名称。
角色表(sys_role)
CREATE TABLE sys_role (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL
);
  • id:角色表的主键,唯一标识每个角色。
  • name:角色名称。
用户角色关联表(sys_user_role)
CREATE TABLE sys_user_role (user_id BIGINT,role_id BIGINT,PRIMARY KEY (user_id, role_id),FOREIGN KEY (user_id) REFERENCES sys_user(id),FOREIGN KEY (role_id) REFERENCES sys_role(id)
);
  • user_id:外键,引用 sys_user 表的 id 列。
  • role_id:外键,引用 sys_role 表的 id 列。
  • PRIMARY KEY (user_id, role_id):联合主键,确保每个用户和角色的组合在表中是唯一的。

关系的具体含义

  1. sys_user 表和 sys_dept 表之间的关系

    • 每个用户可以属于一个部门。
    • dept_id 列作为外键,引用 sys_dept 表的 id 列,确保每个用户记录中的 dept_id 都能在 sys_dept 表中找到对应的部门。
  2. sys_user_role 表和 sys_user 表、sys_role 表之间的关系

    • user_id 列作为外键,引用 sys_user 表的 id 列,确保每个 sys_user_role 记录中的 user_id 都能在 sys_user 表中找到对应的用户。
    • role_id 列作为外键,引用 sys_role 表的 id 列,确保每个 sys_user_role 记录中的 role_id 都能在 sys_role 表中找到对应的角色。

进一步示例

假设我们有以下用户、角色和部门:

  • 用户:Alice, Bob
  • 角色:Admin, User
  • 部门:HR, IT

相关的表数据可能如下:

sys_user
idusernamepasswordemailphonedept_idis_admin
1Alice*****alice@example.com1234567891true
2Bob*****bob@example.com9876543212false
sys_dept
idname
1HR
2IT
sys_role
idname
1Admin
2User
sys_user_role
user_idrole_id
11
22

总结

     外键约束在数据库设计中起到了关键作用,通过定义外键,可以确保数据的完整性和一致性。外键在应用程序中帮助维护表与表之间的关系,例如用户与角色、用户与部门等。在设计数据库时,理解和正确使用外键至关重要,可以显著提高数据库的健壮性和数据的可靠性。

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

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

相关文章

vue框架学习-----vue简介vue.js安装第一个vue程序部分vue指令

什么是vue? Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xf…

微信小程序获取用户信息流程

微信小程序获取用户信息的流程可以分为以下几个步骤,下面将结合参考文章中的信息进行详细解释: 配置权限: 在小程序的app.json文件中配置scope.userInfo,以确保小程序可以请求用户信息授权。创建触发授权的交互元素: …

大学生计算机基础题(一)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 一、单选题(20小题,共30分) 1、下列关于列表的说法中,错误的是…

机器真的能思考、学习和智能地行动吗?

In this post, were going to define what machine learning is and how computers think and learn. Were also going to look at some history relevant to the development of the intelligent machine. 在这篇文章中,我们将定义机器学习是什么,以及…

【Java03】Java中数组在内存中的机制

1. 内存中的数组 Java中的数组是一种引用类型,数组变量(引用)和数组元素在内存中是分开的。 Java中的数组变量其实就是指针。 如果想要访问数组元素,只能通过这个数组的引用变量(指针)来访问。 实际数组对…

杀戮尖塔游戏

Java 你正在玩策略卡牌杀戮尖塔游戏,轮到你出牌,手里N张攻击卡,每张都需要花金币coust[i]和获得伤害dmager[i]。 最多花3金币能造成的最大伤害是多少? class Solution{public int calc(int[] cost, int[] dmager, N){int[][] db …

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包(F1,F4,F7,H7)■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框,等待下载…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样,某社交平台上有个兄弟发帖,说自己刚入职国企,写了个借口,用了PUT和DELETE方法,前段说不能用这两个,这位仁兄感觉很委屈,特地发帖吐槽。 其实站在安全的角度来说,真没冤枉…

MySQL 示例数据库大全

前言: 我们练习 SQL 时,总会自己创造一些测试数据或者网上找些案例来学习,其实 MySQL 官方提供了好几个示例数据库,在 MySQL 的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用 MySQL 的各种功…

简单看看langchain中的一点qwen源码

文章目录 前言导入Tongyi类配置Tongyi类读取api-keyos配置env配置streamlit配置 PromptTemplateLLMChain更换掉LLMChain(可选)StuffDocumentsChain ConversationBufferMemory 前言 本文主要是继续深挖Tongyi类,并进一步探究详细的流程。个人…

云计算【第一阶段(14)】Linux的目录和结构

一、Liunx目录结构 1.1、linux目录结构 linux目录结构是树形目录结构 根目录(树根) 所有分区,目录,文件等的位置起点整个树形目录结构中,使用独立的一个"/",表示 1.2、常见的子目录 必须知道 目录路径目…

【探索Linux】P.34(HTTPS协议)

阅读导航 引言一、HTTPS是什么1. 什么是"加密"2. 为什么要加密3. 常见的加密方式(1)对称加密(2)非对称加密 二、证书认证1. CA认证 三、HTTPS的加密底层原理✅非对称加密对称加密证书认证 温馨提示 引言 在上一篇文章中…

阿里云服务器-Linux搭建fastDFS文件服务器

阿里云官网购买服务器,一般会有降价活动,这两天就发现有活动,99计划活动(在活动期内,续费都是99元) 阿里云官网-云服务器ECS 在这里,我购买了这台服务器,活动期内续费每年99元&…

[FFmpeg学习]windows环境sdl播放音频试验

参考资料: FFmpeg和SDL2播放mp4_sdl 播放mp4 声音-CSDN博客 SimplePlayer/SimplePlayer.c at master David1840/SimplePlayer GitHub 在前面的学习中,通过获得的AVFrame进行了播放画面, [FFmpeg学习]初级的SDL播放mp4测试-CSDN博客 播放…

仲恺ZK——信计专业《软件体系结构》24年试卷回忆

以下是我在总结的复习内容,有需要可以参考借鉴一下。我的主页还有另外一篇复习总结《仲恺ZK——信计专业《软件体系结构》,两者结合起来复习,帮助你轻松过考试😊。总的来说,考试不会太难,只要你了解了各类设…

【Python】深入了解 DeepForest:基于深度学习的森林检测工具

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 🎵 薛凯琪《找到天使了》 在计算机视觉领域中&#x…

Dockerfile 自定义镜像

大家好 , 今天我要和大家分享一个现代软件开发中不可或缺的工具 - Docker . 在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在…

鸿蒙开发电话服务:【@ohos.telephony.sim (SIM卡管理)】

SIM卡管理 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import sim from ohos.telephony.sim;sim.isSimActive7 isSimActive(slotId: number, callback: AsyncCallback): void 获…

MFC工控项目实例之三theApp变量传递对话框参数

承接专栏《MFC工控项目实例之二主菜单制作》 用theApp变量传递对话框参数实时改变iPlotX坐标轴最小值、最大值。 1、新建IDD_SYS_DATA对话框,类名SYS_DATA。 三个编辑框IDC_EDIT1、IDC_EDIT2、IDC_EDIT3变量如图 2、SEAL_PRESSURE.h中添加代码 #include "re…

【前端项目笔记】1 登录与登出功能实现

项目笔记 ☆☆代表面试常见题 前后端分离:后端负责写接口,前端负责调接口。 登录/退出功能 登录业务流程 登录页面:用户名密码 调用后台接口进行验证 通过验证,根据后台响应状态跳到项目主页 登录业务相关技术点&#xff1…