您的位置:首页 > 科技 > IT业 > 网站制作教程网站_做网站的公司_在广州做seo找哪家公司_seo排名赚app最新版本

网站制作教程网站_做网站的公司_在广州做seo找哪家公司_seo排名赚app最新版本

2025/7/28 21:27:36 来源:https://blog.csdn.net/q20202828/article/details/147196924  浏览:    关键词:网站制作教程网站_做网站的公司_在广州做seo找哪家公司_seo排名赚app最新版本
网站制作教程网站_做网站的公司_在广州做seo找哪家公司_seo排名赚app最新版本

每一个表都要有一个主键

好的!我用简单易懂的方式解释这两个概念:


每个用户都有很多消息

每条消息只被一个人单独占有

1. 外键关联(Foreign Key)—— 父子关系(一对多)

是什么:一个表中的字段(外键)指向另一个表的主键,类似于“身份证号”引用。
目的:建立两个表之间的父子关系(一对多),确保数据的一致性。

例子:消息表(messages)和用户表(users

• 用户表(父表):

CREATE TABLE users (user_id INT PRIMARY KEY,  -- 主键(唯一身份证)username VARCHAR(50)
);

• 消息表(子表):

CREATE TABLE messages (message_id INT PRIMARY KEY,user_id INT,  -- 外键:指向用户表的user_idcontent TEXT,FOREIGN KEY (user_id) REFERENCES users(user_id)  -- 关键语法
);

效果
• 每条消息必须属于某个存在的用户(user_id必须在users表中存在)。
• 如果尝试删除一个用户,但该用户还有消息,数据库会阻止删除(除非设置级联删除)。


一个用户可以加入多个聊天室

一个聊天室可以包含多个用户

2. 关联表(Association Table)—— 多对多关系

是什么:一个中间表,专门用来描述两个表之间的多对多关系
目的:解决“一个用户加入多个聊天室,一个聊天室包含多个用户”这类问题。

例子:用户表(users)和聊天室表(chat_rooms

• 用户表:

CREATE TABLE users (user_id INT PRIMARY KEY,username VARCHAR(50)
);

• 聊天室表:

CREATE TABLE chat_rooms (room_id INT PRIMARY KEY,room_name VARCHAR(50)
);

关联表user_rooms):

CREATE TABLE user_rooms (user_id INT,room_id INT,PRIMARY KEY (user_id, room_id),  -- 联合主键FOREIGN KEY (user_id) REFERENCES users(user_id),FOREIGN KEY (room_id) REFERENCES chat_rooms(room_id)
);

效果
• 用户A(user_id=1)可以加入聊天室1和聊天室2。
• 聊天室1(room_id=1)中可以包含用户1、用户2、用户3。
• 查询用户1加入的所有聊天室:
sql SELECT chat_rooms.* FROM user_rooms JOIN chat_rooms ON user_rooms.room_id = chat_rooms.room_id WHERE user_rooms.user_id = 1;


3. 类比现实生活

外键关联:像快递单上的“收件人电话”,必须是一个真实存在的号码。
关联表:像学校的“选课表”,记录哪个学生(student_id)选了哪门课(course_id)。


4. 常见误区

误区:试图在一个表的字段中存储多个ID(如用逗号分隔1,3,5),这是错误做法!
正确做法:用关联表(如user_rooms)存储多对多关系。


总结

外键关联:用于一对多(如一个用户发多条消息)。
关联表:用于多对多(如用户和聊天室)。
• 数据库表是“二维表格”,不能嵌套,但通过这两种方式可以实现数据关联!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com