多表關係
- 一對一:人和身份證
- 一對多:部門和員工:一個部門,多個員工
- 多對多:學生和課程
一對一
- 可以在任一方新增唯一外來鍵指向另一方主鍵
- 一般一對一關係合併成一張表
一對多
- 建立關聯:在多的一方建立外來鍵,指向一的一方的主鍵
- 如:在員工表建立外來鍵,指向部門的主鍵
多對多
- 建立關聯:需要中間表,中間表至少包含兩個欄位–兩張表的主鍵。中間表的聯合主鍵需要唯一。
- 一個例子:
# 中間表 CREATE TABLE middle ( rid INT, -- 表一主鍵 uid INT, -- 表二主鍵 PRIMARY KEY (rid, uid), -- 聯合主鍵 FOREIGN KEY (rid) REFERNCE user(uid), FOREIGN KEY (uid) REFERNCE route(rid) );
資料庫設計正規化
遵從後面的正規化要求,必須先遵從前面的正規化要求。
第一正規化
每一列都是不可分割的原子資料項。
就是說不能有某一列還包含一個或者多個子列。
第二正規化
第一正規化基礎上,非碼屬性必須完全依賴於候選碼(消除第一正規化基礎上的部分依賴)
- 函式依賴:透過A屬性或(A1,A2)屬性組的值可以確定B屬性的值,A->B。
- 學號->姓名,(學號,課程)->成績
- 完全函式依賴:確定B屬性的值需要依賴於A屬性組中所有屬性的值。
- (學號,課程)->成績
- 部分函式依賴:確定B屬性的值只需要依賴於A屬性組中某一些屬性的值。
- (學號,課程)->姓名
- 傳遞函式依賴:A->B,B->C.
- 學號->系名->系主任
- 碼:一個屬性或者主屬性被其他所有屬性完全依賴。
- 主屬性:碼的屬性組中的屬性
- 非主屬性:除了碼之外的所有屬性
第三正規化
任何非主屬性不依賴於其他非主屬性
- 如:”學號,姓名,系,系主任” 表中,系主任依賴於系名,而系和系主任在這個表中都是非主屬性,所以這個表的設計不合理。
本作品採用《CC 協議》,轉載必須註明作者和本文連結