资讯动态

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

发布时间:2026/8/22 23:54:01 来源:尧图企业网站定制
一、前言上一篇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 表idusername1zhangsan2lisiuser_detail 表iduser_idreal_name11张三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_name11张三错误iduser_idreal_name11张三21张三2第二条会报错。因为user_id 唯一所以一个用户只能有一份详情这就是一对一关系七、一对多关系核心再看 user_addressuser_id BIGINT NOT NULL注意没有 UNIQUE所以同一个 user_id 可以出现多次例如iduser_idcity11苏州21上海31北京说明一个用户有多个地址这就是一对多关系八、为什么企业喜欢用 user_id因为数字ID稳定如果你用username做关联会有问题用户名可能修改但id 一般不会变所以企业里关联字段基本都是 ID九、外键FOREIGN KEY到底是什么很多人学到这里又会看到FOREIGN KEY (user_id) REFERENCES user(id)这是什么意思含义表示user_id 必须来自 user.id比如user 表idusername1zhangsan正确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以及数据库到底是怎么“拼表”的

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价