數據庫多表設計
一、多表設計之外鍵約束
⒈ 約束
⑴ 約束的作用
約束是用來保證數據的完整性。
⑵ 單表約束
主鍵約束、唯一約束、非空約束。
⑶ 多表約束
外鍵約束:用來保證數據完整性(多表之間)。
⒉ 演示外鍵約束作用
⑴ 創建一個部門表
create table dept(
did int primary key auto_increment,
dname varchar(20)
);
insert into dept values (null,'市場部');
insert into dept values (null,'人事部');
insert into dept values (null,'教研部');
⑵ 創建一個員工表
create table employee(
eid int primary key auto_increment,
ename varchar(20),
salary double,
birthday date,
sex varchar(10),
dno int
);
insert into employee values (null,'張三',8000,'1988-09-01','男',3);
insert into employee values (null,'李四',9000,'1988-09-01','男',1);
insert into employee values (null,'王五',6000,'1988-09-01','男',2);
insert into employee values (null,'趙六',10000,'1988-09-01','男',3);
insert into employee values (null,'孫七',10000,'1988-09-01','男',1);
⑶ 刪除其中的某個部門(是否可以)
查看數據
向剛纔做的這兩個操作(插入一個沒有部門的員工,刪除一個帶有員工的部門)。這種情況都是不應該發生。這個時候需要在多表之間添加外鍵約束。
⒊ 添加外鍵約束
⑴ 在員工表上添加外鍵
⑵ 設置外鍵爲非空
二、 多表設計之表關係的介紹
⒈ 一對多的關係
一對多的例子:一個部門下可以有多個員工,一個員工只能屬於某一個部門。
⒉ 多對多的關係
多對多的例子:一個學生可以選擇多門課程,一門課程可以被多個學生選擇。
⒊ 一對一的關係
一對一的例子:一個公司可以有一個註冊地址,一個註冊地址只能對一個公司。
三、多表設計之一對多關係
一對多關係的建表原則
在多的一方創建外鍵指向一的一方的主鍵
四、多表設計之多對多
⒈ 多對多的關係介紹
一個學生選擇多門課程,一門課程被多個學生所選擇
⒉ 多對多的建表的原則
需要創建中間表,中間表中至少兩個字段,分別作爲外鍵指向多對多雙方的主鍵
五、多表設計之一對一關係
⒈ 一對一關係的介紹
一個公司可以對應一個註冊地址,一個註冊地址只能對應一個公司
⒉ 一對一關係建表原則
六、多表設計之多表分析及創建
⒈ 多表的分析
需求:完成一個學校的選課系統,在選課系統中包含班級,學生和課程這些實體。
班級和學生之間是有關係存在:一個班級下包含多個學生,一個學生只能屬於某一個班級(一對多的關係)。
學生和課程之間是有關係存在:一個學生可以選擇多門課程,一門課程也可以被多個學生所選擇(多對多的關係)。
⒉ 多表的創建
創建表:
七、多表查詢之多表查詢的概述
多表查詢的分類
⒈ 連接查詢
⒉ 子查詢
子查詢:一個查詢語句條件需要依賴另一個查詢語句的結果。
八、多表查詢之數據準備
⒈ 班級表數據的準備
⒉ 學生表數據的準備
⒊ 課程表數據的準備
⒋ 學生選課表的準備
九、多表查詢之交叉連接
交叉連接
⒈ 使用cross join關鍵字
⒉ 不使用cross join關鍵字
十、多表查詢之內連接
⒈ 顯示內連接
⒉ 隱式內連接
十一、多表查詢之外連接
⒈ 左外連接
⒉ 右外連接
十二、多表查詢之內連接與外連接的區別
內連接和外連接的區別如下圖:
十三、多表查詢之子查詢
⒈ 帶in的子查詢
查詢學生生日在91年之後的班級的信息。
⒉ 帶exists的子查詢
查詢學生生日大於91年1月1日,如果記錄存在,前面的SQL語句就會執行。
⒊ 帶any的子查詢
⒋ 帶all的子查詢
十四、多表查詢之練習