文章目录
- 表和表的关系
- 一对一关系
- 一对多、多对一关系
- 多对多关系
表和表的关系
- 概述:数据库中表的关系有三种,一对一关系、一对多的关系、多对多的关系。
一对一关系
-
例如:一个人只能有一个身份证号,一个身份证号只属于一个人
-
示例代码
-- 创建数据库,并指定 utf8 字符集 CREATE DATABASE IF NOT EXISTS school CHARACTER SET utf8; -- 使用数据库 USE school; -- 创建人类表 CREATE TABLE person( p_id INT PRIMARY KEY AUTO_INCREMENT, -- 人类表 id p_name VARCHAR(40) NOT NULL, -- 姓名字段 p_address VARCHAR(200) -- 地址字段 ); -- 创建身份证号表 CREATE TABLE idcard( c_id INT PRIMARY KEY AUTO_INCREMENT, -- 身份证号表 id c_number VARCHAR(18) -- 身份证号字段 ); -- 插入数据 INSERT INTO person VALUES(1 , '张三' ,'河南'); INSERT INTO person VALUES(2 , '李四' ,'北京'); INSERT INTO person VALUES(3 , '王五' ,'上海'); INSERT INTO idcard VALUES(1 , '11111'); INSERT INTO idcard VALUES(2 , '22222'); INSERT INTO idcard VALUES(3 , '33333'); -- 给人类表添加外键 ALTER TABLE person ADD CONSTRAINT p_idcard FOREIGN KEY (p_id) REFERENCES idcard(c_id);
-
一对一关系图
一对多、多对一关系
-
例如:一门课程只能属于一个老师,一个老师可以有多门课程
- 站在老师的角度,是一对多
- 站在课程的角度,是多对一
- 我们习惯把 一 的一方称之为 主表,多的一方称之为 从表
-
示例代码
-- 创建课程表 CREATE TABLE course( c_id INT PRIMARY KEY AUTO_INCREMENT, -- 课程表 id c_name VARCHAR(100), -- 课程名称 ct_id INT -- 教师外键 ); -- 创建教师表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, -- 教师编号 t_name VARCHAR(40) -- 教师姓名 ); -- 插入数据 INSERT INTO course VALUES( 101, '语文',1); INSERT INTO course VALUES( 102, '数学',3); INSERT INTO course VALUES( 103, '英语',5); INSERT INTO course VALUES( 104, '政治',2); INSERT INTO course VALUES( 105, '历史',1); INSERT INTO course VALUES( 106, '地理',4); INSERT INTO teacher VALUES(1 , '张老师'); INSERT INTO teacher VALUES(2 , '李老师'); INSERT INTO teacher VALUES(3 , '王老师'); INSERT INTO teacher VALUES(4 , '黄老师'); INSERT INTO teacher VALUES(5 , '马老师'); -- 给课程表添加外键 ALTER TABLE course ADD CONSTRAINT c_teacher FOREIGN KEY (ct_id) REFERENCES teacher(t_id);
-
一对多、多对一关系图
多对多关系
-
例如:一门课程可以有多个学生,一个学生也可以有多门课程
- 多对多可以看成两个多对一的关系,此时我们需要使用到中间表
-
中间表的创建规则
- 表名由多对多关系的两个表名称组成
- 表中只有两个字段,分别建立对应外键关联到对应表的主键
- 两个字段都是主键,组成联合主键
-
示例代码
-- 创建学生表 CREATE TABLE student( s_id INT PRIMARY KEY AUTO_INCREMENT, -- 学生表 id s_name VARCHAR(40) NOT NULL -- 学生姓名字段 ); -- 创建中间表 CREATE TABLE student_course( cc_id INT, -- 课程表外键 ss_id INT -- 学生表外键 ); -- 插入数据 INSERT INTO student_course VALUES(101 , 1); INSERT INTO student_course VALUES(101 , 2); INSERT INTO student_course VALUES(101 , 3); INSERT INTO student_course VALUES(102 , 3); INSERT INTO student_course VALUES(105 , 3); INSERT INTO student_course VALUES(104 , 2); INSERT INTO student VALUES(1,'张三'); INSERT INTO student VALUES(2,'李四'); INSERT INTO student VALUES(3,'王五'); -- 添加外键 ALTER TABLE student_course ADD CONSTRAINT c_sc FOREIGN KEY(cc_id) REFERENCES course(c_id); ALTER TABLE student_course ADD CONSTRAINT s_sc FOREIGN KEY(ss_id) REFERENCES student(s_id);
-
多对多关系图
接下来,请看文章:多表查询!