其他分享
首页 > 其他分享> > 多表结构的创建与分析

多表结构的创建与分析

作者:互联网

多表结构的创建与分析

如何找出两张表之间的关系

分析步骤:
#1、先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id)

#2、再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key 左表一个字段(通常是id)

#3、总结:
#多对一:
如果只有步骤1成立,则是左表多对一右表
如果只有步骤2成立,则是右表多对一左表

#多对多
如果步骤1和2同时成立,则证明这两张表时一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

#一对一:
如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然。这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

建立表之间的关系

#一对多或称为多对一
二张表:出版社,书

一对多(或多对一):一个出版社可以出版多本书

关联方式:foreign key
create table press(
id int primary key auto_increment,
name varchar(20)
);
create table book(
id int primary key auto_increment,
name varchar(20),
    press_id int not null,
    foreign key(press_id) references press(id) on update cascade
);

insert into press(name) values
('北京工业地雷出版社'),('人民音乐出版社'),('知识产权出版社');
insert into book(name,press_id) values('九阳神功',1),('九阴真经',2),('白骨爪',2);

#多对多
三张表:出版社,作者信息,书

多对多:一个作者可以写多本书,一本书也可以有多个作者,双向的一对多,即多对多
  
关联方式:foreign key+一张新的表

create table author(
id int primary key auto_increment,
name varchar(20)
);
create table author2book(
id int not null unique auto_increment,
author_id int not null,
 book_id int not null,
 constraint fk_author foreign key(author_id) references author(id)
    on delete cascade,
 constraint fk_book foreign key(book_id) references book(id)
    on delete cascade,
 primary key(author_id,book_id)    
);
insert into author(name) values('egon'),('alex'),('yuanhao'),('wpq');
insert into author2book(author_id,book_id) values
(1,1),
(1,2),
(1,3),
(1,4),
(1,5),
(1,6),
(2,1),
(2,6),
(3,4),
(3,5),
(3,6),
(4,1);

#一对一
两张表:学生表和客户表

一对一:一个学生是一个客户

关联方式:foreign key+unique
create table customer(
id int primary key auto_increment,
name varchar(20) not null,
qq varchar(20) not null,
phone char(16) not null
 );
create table student(
id int primary key auto_increment,
class_name varchar(20) not null,
customer_id int unique,
foreign key(customer_id) references customer(id)
    on update cascade
);
insert into customer(name,qq,phone) values
    ('韩蕾','31811231',13811341220),
    ('杨澜','123123123',15213146809),
    ('翁惠天','283818181',1867141331),
    ('杨宗河','283818181',1851143312),
    ('袁承明','888818181',1861243314),
    ('袁清','112312312',18811431230);
insert into student(class_name,customer_id) values
    ('脱产1班',3),
    ('周末1期',4),
    ('周末1期',5);

标签:分析,多表,name,int,创建,foreign,key,左表,id
来源: https://www.cnblogs.com/wyh0717/p/13391371.html