路飞学城Python-Day96

51-数据库表关系之一对多
为什么有多表的概念?
一个Book有单表的时候只能查询Book表中的内容,要想查询更多的出版社的信息,需要再将单表的内容不断更新
导致单表会存储大量的重复的信息,浪费了大量的空间,字段越多,重复的内容也会越来越多
一对多的后果
Book表
 
 
 
id
title
price
publish
1
php
100
人民出版社
2
python
200
沙河出版社
3
go
100
人民出版社
4
java
300
人民出版社
 
Book
 
 
 
 
 
id
title
price
publish
email
addr
1
php
100
人民出版社
111
北京
2
python
200
沙河出版社
222
沙河
3
go
100
人民出版社
111
北京
4
java
300
人民出版社
111
北京
一对多的实现:
查询python这本书的出版社的邮箱(子查询)
select publish_id from Book where title = "python";
select email from Publish where id = 1;
Book
 
 
 
id
title
price
publish_id
1
php
100
1
2
python
200
1
3
go
100
2
4
java
300
1
Publish
 
 
 
id
name
email
addr
1
人民出版社
111
北京
2
沙河出版社
222
沙河
一旦确定表的关系是一对多的时候,就创建关联字段,关联字段需要创建在多的那张表里

 
52-数据库表关系之多对多
Author
 
 
 
id
name
age
addr
1
alex
34
beijing
2
egon
55
nanjing
 
Book2Author
 
 
id
book_id
author_id
1
2
1
2
2
2
查询alex出版过的书籍名称
select id from Author where name = "alex"
select book_id from Book2Author where author_id = 1
select title from Book where id = book_id
总结:一旦确定表的关系是多对多,一定要创建第三章关系表,就是三个字段,主键id+表1字段+表2字段

53-数据库表关系之一对多一
一对一的关系必须有抽离出的表
 
Author
 
 
 
id
name
age
Authordetail_id(unique)
1
alex
34
1
2
egon
55
2
 
AuthorDetail
 
 
 
 
id
addr
gender
tel
gf_name
1
beijing
male
110
小花
2
nanjing
male
911
小娘
所谓的一对一本质上就是可以放在一个表里,有的时候为了逻辑关系或者表的结构的整洁,就需要解耦这种关系表

总结:一旦确定是一对一的关系,在两张表的任意一张表中建立关联字段+Unique
54-数据库表关系之关联字段与外键约束
一对多表如果互相之间没有关系的话,一般建立关联字段的时候就要建立表之间的约束关系,建关联字段是为了查询,建关联关系约束是为了处理未来可能出现的脏数据
55-数据库表关系之sql创建关联表
1.Publish
CREATE TABLE publish(
            id INT PRIMARY KEY auto_inctrment ,
            name VARCHAR(20),
);
2.Book
CREATE TABLE book(
            id INT PRIMARY KEY auto_inctrment ,
                      title VARCHAR(20),
                      price DECIMAL(8,2),
                        pub_date DATE,
                        publisg_id INT,
                        FOREIGN KEY (publish_id)REFERENCES publis(id),
);
3.AuthorDetail
CREATE TABLE authordetail(
        id INT PRIMARY KEY auto_increment,
        tel VARCHAR(20),
);
4.Author
CREATE TABLE authordetail(
        id INT PRIMARY KEY auto_increment,
        name VARCHAR(20),
        age INT,
        authordetail_id INT UNIQUE,
        FOREIGN KEY (autoordetail_id) REFERENCES authordetail(id),
);
5.Book2Author
CREATE TABLE book2author(
        id INT PRIMARY KEY auto_increment,
        book_id INT,
        author_id INT,
        FOREIGN KEY (book_id) REFREENCES book(id),
        FROEIGN KEY (author_id) REFERENCES author(id),
);
Win a contest, win a challenge
原文地址:https://www.cnblogs.com/pandaboy1123/p/9744188.html