多表之间的关系
1、一对一
2、多对一(一对多)
3、多对多
实现关系
1、一对一关系:
一对一关系的实现,可以在任意一方添加唯一外键指向另一方的主键
2、多对一(一对多):
实现方式:在多的一方建立外键,指向一的一方的主键
3、多对多:
多对多关系的实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。(联合主键)
案例
-- 创建旅游路线分类表 tab_category
-- cid 旅游路线分类主键
-- cname 旅游路线分类名称
CREATE TABLE tab_category(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(10)NOT NULL UNIQUE
);
-- 创建旅游线路表 tab_route
-- rid 旅游路线主键,自动增长
-- rname 旅游线路名称,非空 唯一 字符串(100)
-- price 价格
-- rdate 上架时间 日期类型
-- cid 外键,所属分类
CREATE TABLE tab_route(
rid INT PRIMARY KEY AUTO_INCREMENT,
ranme VARCHAR(100) NOT NULL UNIQUE,
price DOUBLE,
rdate DATE,
cid INT,
FOREIGN KEY(cid) REFERENCES tab_category(cid)
);
-- 创建用户表 tab_user
/*
uid 用户主键 自增长
uesername 用户名 长度100 唯一非空
password 密码 长度100 非空
name 真实姓名 长度100
brithday 生日
sex 性别
telephone 手机号 字符串11
Email 邮箱 字符串长度100
*/
CREATE TABLE tab_user(
uid INT PRIMARY KEY AUTO_INCREMENT,
uesername VARCHAR(100) NOT NULL UNIQUE,
PASSWORD VARCHAR(30) NOT NULL,
NAME VARCHAR(100) NOT NULL,
brithday DATE,
sex CHAR(1) DEFAULT '男',
telephone VARCHAR(11),
Email VARCHAR(100)
);
-- 创建一个中间表,实现多对多
CREATE TABLE tab_favorite(
rid INT, -- 线路id
uid INT, -- 用户id
DATE DATETIME,
-- 创建符合主键
PRIMARY KEY(rid,uid),-- 联合主键
FOREIGN KEY(rid) REFERENCES tab_route(rid),
FOREIGN KEY(uid) REFERENCES tab_user(uid)
);