1.介绍

因为有foreign key的约束,使得两张表形成了三种关系

多对一

一对多

一对一

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

 

分析步骤:
  1. 先站在左表的角度找

是否左表的多条记录对应着右表的一条记录,如果是,则证明左表的一个字段foreign key 右表的一个字段(通常是ID)

   2.站在右表的角度去找

是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段 foreign key 左表一个字段(通常是ID)

  3.总结:

多对一:

如果只有步骤一成立,则是左表多对一右表

如果只有步骤二成立,则是右表多对一左表

多对多:

如果步骤一和步骤二同时成立,则证明这俩张表多对多,需要证明这两张表的关系来存放二者的关系

一对一:

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

3.表的三种关系

(1)书和出版社

  一对多(或多对一):一个出版社可以出版多本书。看图说话。

  关联方式: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,
         constraint fk_book_press foreign key(press_id) references press(id)
    on delete cascade
    on update cascade
);

# 先往被关联表中插入记录
insert into press(name) values
('北京工业地雷出版社'),
('人民音乐不好听出版社'),
('知识产权没有用出版社')
;

# 再往关联表中插入记录
insert into book(name,press_id) values
('九阳神功',1),
('九阴真经',2),
('九阴白骨爪',2),
('独孤九剑',3),
('降龙十巴掌',2),
('葵花宝典',3)
;

查询结果:
mysql> select * from book;
+----+-----------------+----------+
| id | name            | press_id |
+----+-----------------+----------+
|  1 | 九阳神功        |        1 |
|  2 | 九阴真经        |        2 |
|  3 | 九阴白骨爪      |        2 |
|  4 | 独孤九剑        |        3 |
|  5 | 降龙十巴掌      |        2 |
|  6 | 葵花宝典        |        3 |
+----+-----------------+----------+
rows in set (0.00 sec)

mysql> select * from press;
+----+--------------------------------+
| id | name                           |
+----+--------------------------------+
|  1 | 北京工业地雷出版社             |
|  2 | 人民音乐不好听出版社           |
|  3 | 知识产权没有用出版社           |
+----+--------------------------------+
rows in set (0.00 sec)

书和出版社(多对一)
View Code

相关文章:

  • 2022-12-23
  • 2022-02-26
  • 2021-10-05
  • 2022-12-23
  • 2021-08-31
  • 2022-12-23
  • 2021-05-08
猜你喜欢
  • 2021-08-27
  • 2021-10-14
  • 2021-06-25
  • 2022-12-23
相关资源
相似解决方案