用實際案例帶你掌握資料庫設計的 3 把 Key

更新於 發佈於 閱讀時間約 4 分鐘
MySQL Database

MySQL Database

你知道資料庫設計的時候會用到幾種 Key 嗎?不查不知道,一查嚇一跳,足足有七種之多,分別是超鍵 (Super key)、候選鍵 (Candidate key)、主鍵 (Primary key)、替代鍵 (Alternative key)、複合鍵 (Composite key)、唯一鍵 (Unique key) 和外鍵 (Foreign key),關於每一個 Key 的定義與細部說明可以參考這篇文章 **7 Types of Keys in DBMS Explained 的說明,我就不再贅述了。

主鍵、唯一鍵、外鍵

在我擔任資料庫設計師的時候設計過不少資料庫,當我看到這四個陌生的 Key 也確時讓我緊張了一下。我真的需要這四個 Key 嗎?仔細讀完了作者的對七個 Key 說明後我鬆了一口氣,作者所謂的七個 Key 經過歸納後剩下三個,主鍵 (PK)、唯一鍵 (UK) 和外鍵 (FK),如此又就跟我們資料庫設計認知對上了。

資料庫就是一張或多張以上的資料表組成的集合,在每一張資料表都可以使用 PK, UK 這兩種 Key 來幫讓我們確保資料的唯一性,被設定為 PK, UK 的欄位會觸發資料庫內建的限制檢查能力 (constraint) ,確保我們的寫入的資料不會有重複的問題。PK, UK 的差別是欄位數,當我們發現資料表的某個欄位就可以判斷出唯一性,就可以把那個欄位設定為 PK;如果資料表需要兩個以上的欄位組合後才能決定資料唯一性就把這幾個欄位合併設定為 UK,FK, UK 可以同時存在一張表不會有衝突。資料表的 FK 欄位本質就是別張資料表的 PK,我實際拿個案例給你看就知道了。

實際案例

raw-image

這是當時我用來紀錄產品異常的表,總共三張,客戶希望產品發生規格異常的時候能留下紀錄作為日後問題追蹤。客戶會透過預先設定的 UI 去填寫原因與對策,下拉選單的選項來源自 reason, action 兩張表,當客戶分析完原因、採取對策並且寫下註解送出後,這筆異常紀錄就完成了。這三張表都有自己的 PK (id),注意在 log 這張表上有三個 FK, user_id, reason_id 跟 action_id 分別對應外部的 user, reason, action 三張表。所以當客戶要產出異常報表的時候,程式會下 SQL 從 log 資料表開始撈資料,再用 log 資料的三個 FK 去 user, reason, action 資料表拿資料回來組成報表輸出。會設定為 PK, UK, FK 的欄位都是會被用來下 SQL 條件的欄位,MySQL 資料庫為了加快處理資料的速度會幫這些欄位加上索引 (index),萬一你用的資料庫沒有這功能,就得自己手動加這些欄位加上索引。

結論

總而言之,在你學習或設計資料庫的時候只要把注意力集中 PK, UK, FK 這三把 Key 就好了,可以直接無視掉其他四個 Key 徹底掌握這三把鑰匙就能做好資料庫設計的工作了。如果你對資料庫設計感興趣或是這三把 Key 的使用上其他的問題或想法,歡迎提出一起討論。


留言
avatar-img
留言分享你的想法!
avatar-img
Warren Lo的沙龍
21會員
63內容數
WarrenLo's 軟體設計武功祕笈
Warren Lo的沙龍的其他內容
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/09/25
當我們從事軟體開發工作一段時間後,有些人會開始接觸軟體架構設計。由於每個軟體架構設計者的對問題的理解與知識經驗差異會導出不同的設計架構。近期與同事的軟體設計案例經驗交流後,就很希望自己剛開始學習軟體架構設計的時候就有人能用實際的軟體架構設計經驗來帶我入門...
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/07/02
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
2024/04/08
經過這麼多年的觀察與實踐,一個成熟的軟體工程師還需要第四個要素,它是讓決定你通往熟手的重要關鍵沒有之一。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
本文介紹資料庫鎖(DB lock)的基本概念、鎖的類型及其優缺點。通過對資料庫鎖的深入探討,我們可以理解如何在多用戶環境下保護資料的一致性與完整性,並瞭解排他鎖、共享鎖、意向鎖等不同類型鎖的作用。此外,文章還分析了鎖競爭、鎖等待和死鎖等可能的問題,幫助讀者更全面地掌握資料庫鎖的運作機制。
Thumbnail
本文介紹資料庫鎖(DB lock)的基本概念、鎖的類型及其優缺點。通過對資料庫鎖的深入探討,我們可以理解如何在多用戶環境下保護資料的一致性與完整性,並瞭解排他鎖、共享鎖、意向鎖等不同類型鎖的作用。此外,文章還分析了鎖競爭、鎖等待和死鎖等可能的問題,幫助讀者更全面地掌握資料庫鎖的運作機制。
Thumbnail
本文探討資料庫中的索引及其關鍵概念,涵蓋何謂索引、其類型與設立原因、索引失效情況及 B-tree 與 B+ tree 的差異,並簡要區分主鍵與外鍵的功能。瞭解索引的運作有助於提升資料查詢效率,並正確選擇適當的索引策略,以確保資料庫的高效運行。
Thumbnail
本文探討資料庫中的索引及其關鍵概念,涵蓋何謂索引、其類型與設立原因、索引失效情況及 B-tree 與 B+ tree 的差異,並簡要區分主鍵與外鍵的功能。瞭解索引的運作有助於提升資料查詢效率,並正確選擇適當的索引策略,以確保資料庫的高效運行。
Thumbnail
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
在前面的文章中已經在supabase中完成了基本的操作,甚至已經完成訂閱即時更新的功能,接著本篇文章要介紹的是如何在supabase裡設定與使用外來鍵,包含如何在客戶端撰寫查詢外鍵的SQL,馬上開始。如果還沒有閱讀實時更新功能文章的話可以點擊這裡去閱讀。 嗨歡迎閱讀我的文章!這是關於Supabase
Thumbnail
在前面的文章中已經在supabase中完成了基本的操作,甚至已經完成訂閱即時更新的功能,接著本篇文章要介紹的是如何在supabase裡設定與使用外來鍵,包含如何在客戶端撰寫查詢外鍵的SQL,馬上開始。如果還沒有閱讀實時更新功能文章的話可以點擊這裡去閱讀。 嗨歡迎閱讀我的文章!這是關於Supabase
Thumbnail
在現代資訊科技的浪潮下,資料庫管理系統扮演著舉足輕重的角色,決定著企業和開發者如何有效地儲存、查詢和操作數據。MySQL和MongoDB是兩種廣泛使用的資料庫,分別代表了傳統的關聯式資料庫(RDBMS)和新興的非關聯式資料庫(NoSQL)的典型。
Thumbnail
在現代資訊科技的浪潮下,資料庫管理系統扮演著舉足輕重的角色,決定著企業和開發者如何有效地儲存、查詢和操作數據。MySQL和MongoDB是兩種廣泛使用的資料庫,分別代表了傳統的關聯式資料庫(RDBMS)和新興的非關聯式資料庫(NoSQL)的典型。
Thumbnail
定義 NoSQL並不是真的不用SQL, 而是常被業界定義為「Not Only SQL」, 也就是說不只能透過類似SQL的API來存取這類DB。 發展NoSQL的原因 由於RDBMS面臨到一些難題如下: 1. Big Data 傳統的RDBMS是設計在單個節點上運作, 因此當資料量越
Thumbnail
定義 NoSQL並不是真的不用SQL, 而是常被業界定義為「Not Only SQL」, 也就是說不只能透過類似SQL的API來存取這類DB。 發展NoSQL的原因 由於RDBMS面臨到一些難題如下: 1. Big Data 傳統的RDBMS是設計在單個節點上運作, 因此當資料量越
Thumbnail
使用卡片盒筆記寫好一張張的卡片,但要找卡片時,常常記得好像在哪裡有看過,要花一些時間去找。後來上朱騏 老師的《2023朱騏讀書會》提出了「連結卡片」的技巧解決我的困擾。 「索引編號」:編碼過程就是在做想法連結概念,將相似的卡片連成卡片串。 原則:一張卡片就是一則筆記檔案
Thumbnail
使用卡片盒筆記寫好一張張的卡片,但要找卡片時,常常記得好像在哪裡有看過,要花一些時間去找。後來上朱騏 老師的《2023朱騏讀書會》提出了「連結卡片」的技巧解決我的困擾。 「索引編號」:編碼過程就是在做想法連結概念,將相似的卡片連成卡片串。 原則:一張卡片就是一則筆記檔案
Thumbnail
不查不知道,一查嚇一跳,足足七種之多,分別是超鍵 (Super key)、候選鍵 (Candidate key)、主鍵 (Primary key)、替代鍵 (Alternative key)、複合鍵 (Composite key)、唯一鍵 (Unique key) 和外鍵 (Foreign key)
Thumbnail
不查不知道,一查嚇一跳,足足七種之多,分別是超鍵 (Super key)、候選鍵 (Candidate key)、主鍵 (Primary key)、替代鍵 (Alternative key)、複合鍵 (Composite key)、唯一鍵 (Unique key) 和外鍵 (Foreign key)
Thumbnail
有一些具體的關鍵詞。有與流勢有關的關鍵詞,有與人體圖的不同角度有關的關鍵詞,比如說性關鍵詞。有各種各樣的關鍵詞——它們都是方程式。
Thumbnail
有一些具體的關鍵詞。有與流勢有關的關鍵詞,有與人體圖的不同角度有關的關鍵詞,比如說性關鍵詞。有各種各樣的關鍵詞——它們都是方程式。
Thumbnail
先說 !這是一個系列的學習手札,所有內容都是我邊學邊做的,有任何錯誤歡迎指教,希望大家能一起進步 本章能學到了 SQL 是什麼,它們的分類,以及Keys 的觀念
Thumbnail
先說 !這是一個系列的學習手札,所有內容都是我邊學邊做的,有任何錯誤歡迎指教,希望大家能一起進步 本章能學到了 SQL 是什麼,它們的分類,以及Keys 的觀念
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News