表关系

在开发项目时,需要根据业务需求去创建很多的表结构,以此来实现业务逻辑,一般表结构有三类:

  • 单表,单独一张表就可以将信息保存。

         

  • 一对多,需要两张表来存储信息,且两张表存在 一对多 或 多对一关系。

       

        创建表时创建外键(depart表创建方式和原来一样):

create table info(
	id int not null auto_increment primary key,
    name varchar(16) not null,
    email varchar(32) not null,
    age int,
    depart_id int not null,
    constraint fk_info_depart foreign key (depart_id) references depart(id)
  --- constraint 约束;foreign key 外键;references 关联
)default charset=utf8;

        当表已经创建完成,这时需要额外增加外键:

alter table info add constraint fk_info_depart foreign key info(depart_id) references depart(id);

        删除外键:

alter table info drop foreign key fk_info_depart;
  • 多对多,需要三张表来存储信息,两张单表 + 关系表,创造出两个单表之间多对多关系。

         

        创建表时创建外键(boy和girl表创建方式与原来一样):

create table boy_girl(
	id int not null auto_increment primary key,
    boy_id int not null,
    girl_id int not null,
    constraint fk_boy_girl_boy foreign key boy_girl(boy_id) references boy(id),
    constraint fk_boy_girl_girl foreign key boy_girl(girl_id) references girl(id)
)default charset=utf8;

      如果表结构已创建好了,额外想要增加外键:

alter table boy_girl add constraint fk_boy_girl_boy foreign key boy_girl(boy_id) references boy(id);
alter table boy_girl add constraint fk_boy_girl_girl foreign key boy_girl(girl_id) references girl(id);

       删除外键:

alter table info drop foreign key fk_boy_girl_boy;
alter table info drop foreign key fk_boy_girl_girl;

案例:简易版路飞学城

create database luffy default charset utf8 collate utf8_general_ci; --创建数据库

use luffy;  --进入数据库

--创建info表
create table info(
	id int not null auto_increment primary key,  --不能为空,主键,自增
    username varchar(16) not null,
    mobile char(11) not null,
    password varchar(64) not null
)default charset=utf8;

--创建course表
create table course(
	id int not null auto_increment primary key,
    title varchar(16) not null
)default charset=utf8;

--创建module表,course_id为外键,与 course表中的id进行关联
create table module(
	id int not null auto_increment primary key,
    title varchar(16) not null,
    course_id int not null,
    constraint fk_module_course foreign key (course_id) references course(id)
)default charset=utf8;

--创建day表,module_id为外键,与module表中的id进行关联
create table day(
	id int not null auto_increment primary key,
    title varchar(16) not null,
	module_id int not null,
    constraint fk_day_module foreign key (module_id) references module(id)
)default charset=utf8;

--创建video表,day_id为外键,与day表中的id进行关联
create table video(
	id int not null auto_increment primary key,
    title varchar(16) not null,
	day_id int not null,
    constraint fk_video_day foreign key (day_id) references day(id)
)default charset=utf8;

--创建module_record表,user_id和module_id为外键,分别与info中id,module表中id进行关联
create table module_record(
	id int not null auto_increment primary key,
    user_id int not null,
    module_id int not null,
    constraint fk_user_id foreign key module_record(user_id) references info(id),
    constraint fk_module_id foreign key module_record(module_id) references module(id)
)default charset=utf8;
posted @ 2021-11-19 16:32  A熙  阅读(92)  评论(0)    收藏  举报