Bootstrap

数据库的设计及经典案例

1.多表之间的关系

1.分类

一对一人和身份证
一对多员工和部门
多对多学生和课程

2.实现关系
一对一:可以在任意一方添加唯一外键指向另一方的主键。
一对多:在多的一方建立外键,指向一的一方的主键。
多对多:需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。

多表实现的案例分析

在这里插入图片描述

-- 创建旅游线路分类表 tab_category
-- cid 旅游线路分类主键,自动增长
-- cname 旅游线路分列名称非空,唯一。
create table  tab_category(
    cid int primary key auto_increment,
    cname varchar(100) not null unique
);

-- 创建旅游线路表tab_route
-- rid 旅游线路主键,自动增长
-- rname 旅游线路名称非空,唯一,字符串100
-- price 价格;rdate 上架时间,日期类型; cid 外键,所属分类
create table tab_route(
    rid int primary key auto_increment,
    rname varchar(100) not null unique ,
    price double,
    rdate date,
    rou_cid int,
    foreign key (rou_cid) references tab_category(cid) -- constraint rou_cat_fk 省略,系统分配一个随机的外键约束名
);

/*
创建用户表 tab_user
uid 用户主键,自增长
username 用户名100 唯一,非空
password 密码30 非空
name 真实姓名100
birthday 生日
sex 性别,定长字符串1
telephone 手机号 字符串11
email 邮箱,字符串长度100
*/
create table tab_user(
    uid int primary key auto_increment,
    username varchar(100) not null unique ,
    password varchar(30) not null ,
    name varchar(100),
    birthday date,
    sex char(1) default '男',
    telephone varchar(11),
    email varchar(100)
);

/*
 创建中间表  tab_favorite
 rid 旅游线路id,外键
 date 收藏时间
 uid 用户id ,外键
 rid和uid 不能重复,设置复合主键,同一个用户不能收藏同一个线路两次
 */
 create table tab_favorite(
     rid int,
     date datetime,
     uid int,
     -- 创建复合键
     primary key  (rid,uid), -- 联合主键
     foreign key (rid) references tab_route(rid),
     foreign key (uid) references tab_user(uid)
 );

在这里插入图片描述

;