多表結構的建立與分析

2022-08-27 14:48:14 字數 2865 閱讀 3461

如何找出兩張表之間的關係

分析步驟:

#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);

mysql之多表建立索引分析

一.2張表分析 select form users left join dept on users.deptid dept.id 以左邊為驅動,左邊表的資料自然全有了,所以要再dept表建立id索引,我這舉的是個特例了,因為部門表id是主鍵,自動建立索引了。二.3張表分析 select form u...

C S結構與B S結構的特點分析

為了區別於傳統的c s模式,才特意將其稱為b s模式。認識到這些結構的特徵,對於系統的選型而言是很關鍵的。1 系統的效能 在系統的效能方面,b s占有優勢的是其異地瀏覽和資訊採集的靈活性。任何時間 任何地點 任何系統,只要可以使用瀏覽器上網,就可以使用b s系統的終端。不過,採用b s結構,客戶端只...

CS結構與BS結構的特點分析

為了區別於傳統的c s模式,才特意將其稱為b s模式。認識到這些結構的特徵,對於系統的選型而言是很關鍵的。1 系統的效能 在系統的效能方面,b s占有優勢的是其異地瀏覽和資訊採集的靈活性。任何時間 任何地點 任何系統,只要可以使用瀏覽器上網,就可以使用b s系統的終端。不過,採用b s結構,客戶端只...