1. 程式人生 > 其它 >MySQL:關係和正規化

MySQL:關係和正規化

關係

  1. 多表之間的關係
    1. 分類:
      1. 一對一(瞭解):
        • 如:人和身份證
        • 分析:一個人只有一個身份證,一個身份證只能對應一個人
      2. 一對多(多對一):
        • 如:部門和員工
        • 分析:一個部門有多個員工,一個員工只能對應一個部門
      3. 多對多:
        • 如:學生和課程
        • 分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇
    2. 實現關係:
      1. 一對多(多對一):
        • 如:部門和員工
        • 實現方式:在多的一方建立外來鍵,指向一的一方的主鍵。
      2. 多對多:
        • 如:學生和課程
        • 實現方式:多對多關係實現需要藉助第三張中間表。中間表至少包含兩個欄位,這兩個欄位作為第三張表的外來鍵,分別指向兩張表的主鍵
      3. 一對一(瞭解):
        • 如:人和身份證
        • 實現方式:一對一關係實現,可以在任意一方新增唯一外來鍵指向另一方的主鍵。

正規化

  • 概念:設計資料庫時,需要遵循的一些規範。要遵循後邊的正規化要求,必須先遵循前邊的所有正規化要求

      設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。
      目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第三正規化(3NF)、巴斯-科德正規化(BCNF)、第四正規化(4NF)和第五正規化(5NF,又稱完美正規化)。
    
    • 分類:
      1. 第一正規化(1NF):每一列都是不可分割的原子資料項

      2. 第二正規化(2NF):在1NF的基礎上,非碼屬性必須完全依賴於碼(在1NF基礎上消除非主屬性對主碼的部分函式依賴)

        • 幾個概念:
          1. 函式依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴於A
            例如:學號-->姓名。 (學號,課程名稱) --> 分數
          2. 完全函式依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴於A屬性組中所有的屬性值。
            例如:(學號,課程名稱) --> 分數
          3. 部分函式依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴於A屬性組中某一些值即可。
            例如:(學號,課程名稱) -- > 姓名
          4. 傳遞函式依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱 C 傳遞函式依賴於A
            例如:學號-->系名,系名-->系主任
          5. :如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼
            例如:該表中碼為:(學號,課程名稱)
            • 主屬性:碼屬性組中的所有屬性
            • 非主屬性:除過碼屬性組的屬性
      3. 第三正規化(3NF):在2NF基礎上,任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)


參考來自黑馬,侵刪