多表之间的关系
分类与实现方式
一对一(了解)
- 如:人和身份证
- 分析:一个人只有一个身份证,一个身份证只能对应一个人
- 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键
一对多(多对一)*
- 如:部门和员工
- 分析:一个部门有多个员工,一个员工只能对应一个部门
- 实现方式:在多的一方建立外键,指向一的一方的主键
多对多
- 如:学生和课程
- 分析:一个学生可以选择很多门课程,一门课程可以被很多学生选择
- 实现方式:多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为该表的外键,分别指向两张表的主键。
练习
-
旅游线路表
id name price
-
旅游线路分类
id name
-
用户表
id username password
对应关系
- 旅游线路表 == 旅游线路分类 多对一
- 旅游线路表 == 用户表 多对多
实现方式
- 旅游线路表添加外键,连接旅游线路分类表的主键
- 创建第四张表连接 旅游线路表和用户表,两个字段外键分别是两张表的主键
实现步骤
- 创建旅游线路分类表
- 创建旅游线路表外键连接旅游线路分类表的id
- 创建用户表
- 创建第四张表,外键分别是旅游线路表和用户表的主键
#1创建旅游线路分类表 id作为主键
CREATE TABLE trou_route_class(
id int PRIMARY KEY AUTO_INCREMENT, -- 路线分类id:主键,自动增长
name VARCHAR(30) NOT NULL UNIQUE -- 路线类名约束:非空,唯一
);
#2创建旅游线路表,添加外键连接旅游线路表的主键 id作为主键,外键名称省略创建
CREATE TABLE trou_route(
id int PRIMARY KEY AUTO_INCREMENT, -- 路线id:主键,自动增长
name VARCHAR(30) NOT NULL UNIQUE, -- 路线名:非空,唯一
price DOUBLE,
shelf_time DATE, -- 上架日期
class_id int,
FOREIGN KEY (class_id) REFERENCES trou_route_class(id)
);
#3创建用户表
CREATE TABLE user(
id INT PRIMARY KEY NOT NULL,
username VARCHAR(20) NOT NULL,
password INT NOT NULL,
sex VARCHAR(20),
telephone VARCHAR(11)
);
#4中间表,用来联系用户表和旅游路线表,外键分别是旅游路线表和用户表的主键,外键名称省略创建
CREATE TABLE user_route(
route_id INT,
user_id INT,
PRIMARY KEY(route_id,user_id), -- 联合主键
FOREIGN KEY (route_id) REFERENCES trou_route(id),
FOREIGN KEY (user_id) REFERENCES user(id)
);