- 数据库一对多案例(一个旅游类别对应多个旅游路线)
一个旅游的类别对应多个旅游线路。类别与旅游线路表是属于1对多的关系:
#创建一个旅游类别表
CREATE TABLE tab_category(
#旅游线路分类主键
cid INT PRIMARY KEY AUTO_INCREMENT,
#旅游线路分类名称
cname VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO tab_category(cname)VALUES('国内自助'),('出境自助'),('国内跟团'),('周边自驾');
#创建一个旅游线路表
CREATE TABLE tab_route(
#旅游线路主键
rid INT PRIMARY KEY AUTO_INCREMENT,
#旅游线路名称
rname VARCHAR(100) NOT NULL UNIQUE,
#价格
price DOUBLE NOT NULL,
#线路介绍
routeIntroduce VARCHAR(200),
#是否上架
rflag CHAR(1) NOT NULL,
#上架时间
rdate VARCHAR(19) NOT NULL,
#是否主题旅游
isThemeTour CHAR(1) NOT NULL,
#收藏数量
acount INT DEFAULT 0,
#所属分类
cid INT NOT NULL,
#缩略图地址
rimage VARCHAR(200) NOT NULL,
CONSTRAINT category_route_FK FOREIGN KEY(cid) REFERENCES tab_category(cid)
);
- 多对多的关系(一个用户可以收藏多个旅游路线,一个旅游路线可以被用户用户收藏)
- 关系:多对多的关系
- 一个用户可以收藏多个旅游路线。
- 一个旅游路线可以被多个用户收藏。
#创建用户表
CREATE TABLE tab_user (
uid INT PRIMARY KEY AUTO_INCREMENT, -- 用户id
username VARCHAR(100) NOT NULL UNIQUE, -- 用户名
PASSWORD VARCHAR(30) NOT NULL, -- 密码
NAME VARCHAR(100), -- 真实姓名
birthday DATE, -- 生日
sex CHAR(1), -- 性别
telephone VARCHAR(11), -- 手机号
email VARCHAR(100), -- 邮箱
STATUS CHAR(1) NOT NULL, -- 是否激活状态
CODE VARCHAR(32) NOT NULL UNIQUE -- 激活码
);
#添加用户数据
INSERT INTO tab_user VALUES
(NULL, 'cz110', 123456, '老王', '1977-07-07', '男', '13888888888', '66666@qq.com', '是', '1386'),
(NULL, 'cz119', 654321, '小王', '1999-09-09', '男', '13999999999', '99999@qq.com', '是', '9898');
#创建收藏表
CREATE TABLE tab_favorite (
fid INT PRIMARY KEY AUTO_INCREMENT, -- 收藏主键
rid INT NOT NULL, -- 旅游线路id
DATE DATE NOT NULL, -- 收藏时间
uid INT NOT NULL -- 用户id
);
#增加收藏表数据
INSERT INTO tab_favorite VALUES
(NULL, 1, '2018-01-01', 1), -- 老王选择厦门
(NULL, 1, '2018-01-01', 2), -- 老王选择桂林
(NULL, 1, '2018-01-01', 3), -- 老王选择泰国
(NULL, 2, '2018-01-01', 2), -- 小王选择桂林
(NULL, 2, '2018-01-01', 3), -- 小王选择泰国
(NULL, 2, '2018-01-01', 5); -- 小王选择迪士尼
#描述用户与旅游路线的关系(多对多的关系)
CREATE TABLE route_user(
r_id INT , #旅游路线的id
u_id INT , #用户的id
#建立外键的关系
CONSTRAINT route_user_fk1 FOREIGN KEY(r_id) REFERENCES tab_route(rid),
CONSTRAINT route_user_fk2 FOREIGN KEY(u_id) REFERENCES tab_user(uid),
#设置为联合主键
PRIMARY KEY(r_id,u_id)
);