news 2026/5/8 0:42:42

SQL 第三篇:表关系设计(user_id 到底是什么)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL 第三篇:表关系设计(user_id 到底是什么)

一、前言

上一篇
SQL 第二篇:表结构设计(为什么企业要拆成 3 张表)
我们已经把三张表建好了:

user user_detail user_address

但是很多人到这里会开始懵:

为什么 user_detail 里有 user_id? 为什么 user_address 里也有 user_id?

甚至很多人第一次学数据库时,会觉得:

数据库是不是会自动知道它们之间的关系?

其实不是。


二、先说结论(这一篇核心)

数据库不会自动关联表
表之间的关系,是你自己设计出来的

而这个关系的核心:

就是 user_id

三、user_id 到底是什么?

我们先看:


user 表

CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(64) );

user_detail 表

CREATE TABLE user_detail ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL UNIQUE, real_name VARCHAR(50) );

这里:

user.id

和:

user_detail.user_id

实际上表示的是:

同一个用户

四、user_id 本质是什么?

本质上:

user_id = “引用 user 表里的 id”

比如:

user 表

idusername
1zhangsan
2lisi

user_detail 表

iduser_idreal_name
11张三
22李四

这里:

user_detail.user_id = user.id

表示:

这份详情属于哪个用户

五、数据库里的“关系”到底是什么?

很多初学者会误以为:

表和表之间真的“连”在一起

其实不是。

数据库本质上:只是两张独立的表

真正让它们产生关系的是:相同的字段值

比如:

user.id = 1 user_detail.user_id = 1

于是数据库就知道:

这两条数据有关联

六、一对一关系(核心)

上一篇我们写过:

user_id BIGINT NOT NULL UNIQUE

重点在:

UNIQUE

为什么 UNIQUE 就是一对一?

因为:

同一个 user_id 只能出现一次

例如:


正确

iduser_idreal_name
11张三

错误

iduser_idreal_name
11张三
21张三2

第二条会报错。

因为:user_id 唯一

所以:

一个用户只能有一份详情

这就是:

一对一关系

七、一对多关系(核心)

再看 user_address:

user_id BIGINT NOT NULL

注意:

没有 UNIQUE

所以:

同一个 user_id 可以出现多次

例如:

iduser_idcity
11苏州
21上海
31北京

说明:

一个用户有多个地址

这就是:

一对多关系

八、为什么企业喜欢用 user_id?

因为:

数字ID稳定

如果你用:

username

做关联,会有问题:

用户名可能修改

但:

id 一般不会变

所以企业里:

关联字段基本都是 ID

九、外键(FOREIGN KEY)到底是什么?

很多人学到这里又会看到:

FOREIGN KEY (user_id) REFERENCES user(id)

这是什么意思?


含义

表示:

user_id 必须来自 user.id

比如:


user 表

idusername
1zhangsan

正确

user_id = 1

因为:

user.id 里存在 1

错误

user_id = 999

因为:

user 表根本没有 999

数据库会拒绝插入。


十、企业里为什么很多项目不用外键?

这个问题很经典。

原因:

1️⃣ 外键会影响性能

因为数据库需要额外检查:这个 user_id 存不存在


2️⃣ 分库分表后外键很难用

大型系统:

user

和:

user_address

可能不在一个库。

这时候:

外键无法使用

3️⃣ 企业更多用“代码保证关系”

也就是:

userMapper.selectById(userId)

先查用户是否存在。


十一、所以到底要不要用外键?

我的建议:


学习阶段

✔ 可以用

因为:

更容易理解表关系

企业项目

很多项目:

不用外键

而是:

逻辑外键

即:

只保留 user_id
不真正建立 FOREIGN KEY


十二、这一篇真正的核心

这一篇最重要的不是:

UNIQUE FOREIGN KEY

而是:真正理解了“数据库关系”到底是什么


十三、一句话总结

表关系的本质:

👉 用相同字段值,把两张独立的表关联起来


下一篇预告

下一篇正式进入:

SQL 第四篇:JOIN 实战(为什么表能拼起来)

真正讲透:

INNER JOIN LEFT JOIN ON

以及:

数据库到底是怎么“拼表”的
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 0:42:23

Agile V框架:AI时代合规性验证的高效解决方案

1. Agile V框架:AI增强工程中的合规性验证新范式在医疗设备、汽车电子等高度监管的行业,软件开发团队正面临一个两难困境:一方面,AI代码生成工具能显著提升开发效率;另一方面,传统合规验证流程无法跟上AI的…

作者头像 李华
网站建设 2026/5/8 0:35:53

MacSweep:专为AI开发者设计的精准清理工具,一键释放数十GB空间

1. 项目概述:一个真正懂AI开发的Mac清理工具如果你是一名在Mac上折腾AI开发的程序员,那你一定对硬盘空间被无声吞噬的痛楚深有体会。今天要聊的这个项目,MacSweep,就是为解决这个痛点而生的。它不是另一个CleanMyMac,也…

作者头像 李华
网站建设 2026/5/8 0:30:42

稀疏检索技术解析:从TF-IDF到混合架构实战

1. 稀疏检索技术的前世今生稀疏检索(Sparse Retrieval)作为信息检索领域的经典方法,在过去二十年里经历了从统治地位到边缘化,再到复兴的戏剧性转折。我第一次接触这项技术是在2012年参加TREC会议时,当时神经网络方法刚…

作者头像 李华
网站建设 2026/5/8 0:27:57

暗黑破坏神2重制版多开终极解决方案:D2RML完全指南

暗黑破坏神2重制版多开终极解决方案:D2RML完全指南 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 还在为切换暗黑2重制版账户而烦恼吗?每次登录战网、输入密码、等待启动的繁琐…

作者头像 李华
网站建设 2026/5/8 0:25:51

深度解析:Univer如何重新定义企业级文档协作的技术范式

深度解析:Univer如何重新定义企业级文档协作的技术范式 【免费下载链接】univer Build AI-native spreadsheets. Univer is a full-stack framework for creating and editing spreadsheets on both web and server. With Univer Platform, Univer Spreadsheets is …

作者头像 李华