暑期自學 Day 12 | 資料庫 (五)- 多表,資料庫設計

Borris發表於2020-05-24

多表關係

  • 一對一:人和身份證
  • 一對多:部門和員工:一個部門,多個員工
  • 多對多:學生和課程

一對一

  • 可以在任一方新增唯一外來鍵指向另一方主鍵
  • 一般一對一關係合併成一張表

一對多

  • 建立關聯:在多的一方建立外來鍵,指向一的一方的主鍵
  • 如:在員工表建立外來鍵,指向部門的主鍵

多對多

  • 建立關聯:需要中間表,中間表至少包含兩個欄位–兩張表的主鍵。中間表的聯合主鍵需要唯一。
  • 一個例子:
    # 中間表
    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 協議》,轉載必須註明作者和本文連結

相關文章