資料庫設計流程

閱讀時間約 7 分鐘

以下為自學筆記,參考網路多項資源,若有錯誤請不吝指正~

首先了解資料庫到底是什麼,到底設計資料庫會有哪些流程,再介紹關聯資料庫的基本組成、五大常見的 Key 和限制。下一篇會跟著 YouTube 影片將 ER 圖轉成關聯的 Schema 表格。

資料結構的 Flat file 和 Database

我們先來看 Flat-file 跟 Database 差在哪?

Flat-file 和 Database 是兩種儲存資料的方式,但它們在結構、功能和用途上有明顯差異。以下是兩者的主要差別:

raw-image

資料庫的設計大致流程

了解使用者的需求:

  • 瞭解客戶的工作流程、各部門資料串連的關係、需要倒出什麼樣的報表

畫出 ER圖 (概念設計)

  • 此階段還是圖像,尚未轉算成連接的表格。
  • 下文會詳細介紹 ER 圖含有的原素

轉換為邏輯資料模型(Logical Data Model)

  • 產生邏輯 Schema (模式) (如下圖,已確定用資料表所需的欄位,以及資料表之間如何串聯成資料庫)
  • 根據 ER 圖先轉換為資料表(Tables)、欄位(Columns)、資料類型(Data Types)、主鍵(Primary Keys)和外鍵(Foreign Keys)等細節
  • 再把每個有相關的資料,用key連結,形成關聯式資料模型 (Relational Model)
  • 關聯式資料庫(Relational Database)會有 5 種限制,後文也會提到。

實際實作模型(Physical Data Model and Implementation)

  • 將邏輯模型轉換為物理模型(可以實際使用的資料庫)
  • 使用實際的資料庫系統(如 MySQL、PostgreSQL)上實際建立資料庫
  • 需考慮使用者習慣和存取效能

ER 圖 Entity-Relationship Model 介紹

這是一個公司的資料庫設計,以下內容截圖自 YouTube 影片,看起來不算複雜

raw-image


這個圖主要會有以下這些元素:

圖片來源:Geeksforgeeks

圖片來源:Geeksforgeeks

Entity 實體

  • Srong Entity:不需要依靠別的主體存在,例如員工這個實體。
  • Weak Entity: 需要依靠別的主體存在,例如員工的家人,如果沒有員工,就不會有員工的家人存在。「員工的家人」需要透過「員工」來識別。這類實體沒有自己的主鍵,而是通過「依賴實體」的主鍵加上自己的**部分鍵(Partial Key)**來識別。

Attribute 屬性

在表格中,通常是 column header (欄的標頭),每列(row)資料則是 tuple
描述實體的方式
  • Key Attribute: 獨一無二的判斷值,例如員工ID。
  • Composite Attribute: 可拆的屬性,例如地址可以再往下拆成 縣市、區、門牌號碼...
  • Multivalued Attribute: 可能會有很多值,例如一個人會有多個手機號碼。
  • Derieved Arribute: 靠別的值計算出來,例如年齡,只要有出生年就可以推斷。

Relationship 關係

  • One-to-One, 1:1
    一對一,例如一個主管職只能對一個員工
  • One-to-Many
    例如,一個部門可以有多個員工,但每個員工只能屬於一個部門。
  • Many-to-Many, M
    例如,學生和課程之間的關係:一個學生可以選修多門課程,而一門課程也可以被多個學生選修。這類關係通常需要中間表來實現關聯。
  • 自身關係(Recursive Relationship)Recursive 也有遞迴的意思
    同一實體中的實例之間的關係。例如,員工和其直屬主管的關係,兩者都是員工實體的一部分。
raw-image


1:N 的關係

raw-image

這個圖怎麼看呢?

Employee 對 Department 的關係是 1 個 employee 只能隸屬一個部門,但一個部門可以有很多員工。

兩個 Entity 的關係限制

  • Partcial participant: 員工 跟 管理的關係,不是每個員工都會有管理的關係,所以是partcial, 因為有人落單。用一條線表示
  • Total particiapant: 每個department 一定都會有manges 一個員工,用兩條線表示
raw-image

另一種呈現方式,呈現 Entity 和關係的最大最小值。

(Min,Max)

  • 第一列的 (0,1) 一位員工最少會管理 0 個部門,最多管理 1個部門。
  • 第二列的 (1,N) 一個部門最少有一位員工為他工作,最多有 N 位員工為他工作


raw-image

資料庫的五大 key

資料庫中的各種 Key 是用來確保資料的唯一性和完整性。以下是主要的 Key 類型、解釋與簡單的例子:

raw-image

關聯式資料庫的五種限制

raw-image

Domain Constraints (定義域限制) :

  • 每個屬性的性質都需要符合該屬性的定義,例如薪水只能是數字,姓名是字串。
  • 在geeksforgeeks 提到,各屬性必須是最小單位(原子值)(atomic values),如下圖電話號碼有多值,就會違反這個限制。
raw-image

Key Constraints (關聯鍵限制):

  • 資料庫的關聯中要有關聯鍵的定義,也就是我上面提到的Super key、Candidate Key、Primary Key、Alternate Key、Foreign Key。
  • Primary Key不可以跟別人重複。下圖,有兩個 01 當Primary Key
raw-image


Entity Intergrity Constraints (實體完整限制):

  • Primary Key,不能為空 (NULL),不然找不到。
raw-image

Referential Integerity Constraints(參考完整限制):

  • 如果有 Foreign Key 為非空值,必須有可以參考的 Primary Key 。因為如果 Foreign Key 存在,而無法關連到其他表格的Primary Key,這個關聯存在就沒有意義。
  • DNO 是左表的Foreign Key,必須有連接到右表的 Primary Key。
raw-image

主要參考資料與圖片來源:

Basic Concepts of Entity-Relationship Model(這個頻道的影片)

Constraints on Relational Database Model(GeeksforGeeks)






留言0
查看全部
發表第一個留言支持創作者!
前一篇提到B樹和B+樹,這篇介紹AVL 樹和經典的紅黑樹。 在開始之前,可以看個輕鬆的影片,對於紅黑樹在真實商業案例的應用更有印象 學習資料結構、演算法在工作上真的有用嗎? 實際工作經歷不藏私! | 二元樹 | 雜湊 | 計算機概論 | 工程師 Nic
本文詳細介紹了雜湊表(Hash Table)及雜湊函數(Hash Function)的運作原理與應用,如何解決衝突(Collision)問題,並引入字典樹(Trie)作為另一種資料搜尋結構。透過簡單易懂的比喻和實例,幫助讀者理解這些資料結構的效能和實際用途。
樹是資料結構中的核心概念,尤其是當數據量龐大時,選擇適當的樹結構能顯著提升查找和管理效率。本文深入探討了B樹、B+樹、AVL樹及紅黑樹的特性、操作方法及其廣泛應用,並強調選擇自平衡樹的必要性,以確保資料讀取的快速與精確。本文也鼓勵讀者通過動畫學習以便更好地理解這些複雜的樹結構。
在 C 語言中,陣列的大小固定且使用連續記憶體空間,插入新元素可能不便。鏈結串列則提供了靈活性,可以在不需要連續記憶體的情況下,輕鬆插入新節點。本文將探討陣列與鏈結串列各自的特點,並對比它們在插入與查找操作上的 Big O 複雜度,讓讀者瞭解在不同情境下使用的最佳資料結構選擇。
延續上一篇的指標,補充 pass by value 和 pass by reference 的差別。 C 語言指標-程式碼圖解 當我們在程式中呼叫函數時,變數的傳遞方式有兩種:pass by value 和 pass by reference。這兩者的區別主要在於傳遞的是「值」還是「記憶體位置的
大魔王指標:初學者的天堂路。 指標(Pointer)是 C 語言裡的「大魔王」,是資工系學生花了至少 9 小時上的課。我們一起用 18 分鐘文章快速了解指標的基本概念,中間在字串的部分我將結果和程式碼做對照。最後,我會將我跟 ChatGPT 對話放上來跟大家一起學習。
前一篇提到B樹和B+樹,這篇介紹AVL 樹和經典的紅黑樹。 在開始之前,可以看個輕鬆的影片,對於紅黑樹在真實商業案例的應用更有印象 學習資料結構、演算法在工作上真的有用嗎? 實際工作經歷不藏私! | 二元樹 | 雜湊 | 計算機概論 | 工程師 Nic
本文詳細介紹了雜湊表(Hash Table)及雜湊函數(Hash Function)的運作原理與應用,如何解決衝突(Collision)問題,並引入字典樹(Trie)作為另一種資料搜尋結構。透過簡單易懂的比喻和實例,幫助讀者理解這些資料結構的效能和實際用途。
樹是資料結構中的核心概念,尤其是當數據量龐大時,選擇適當的樹結構能顯著提升查找和管理效率。本文深入探討了B樹、B+樹、AVL樹及紅黑樹的特性、操作方法及其廣泛應用,並強調選擇自平衡樹的必要性,以確保資料讀取的快速與精確。本文也鼓勵讀者通過動畫學習以便更好地理解這些複雜的樹結構。
在 C 語言中,陣列的大小固定且使用連續記憶體空間,插入新元素可能不便。鏈結串列則提供了靈活性,可以在不需要連續記憶體的情況下,輕鬆插入新節點。本文將探討陣列與鏈結串列各自的特點,並對比它們在插入與查找操作上的 Big O 複雜度,讓讀者瞭解在不同情境下使用的最佳資料結構選擇。
延續上一篇的指標,補充 pass by value 和 pass by reference 的差別。 C 語言指標-程式碼圖解 當我們在程式中呼叫函數時,變數的傳遞方式有兩種:pass by value 和 pass by reference。這兩者的區別主要在於傳遞的是「值」還是「記憶體位置的
大魔王指標:初學者的天堂路。 指標(Pointer)是 C 語言裡的「大魔王」,是資工系學生花了至少 9 小時上的課。我們一起用 18 分鐘文章快速了解指標的基本概念,中間在字串的部分我將結果和程式碼做對照。最後,我會將我跟 ChatGPT 對話放上來跟大家一起學習。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
一般在使用 TypeScript 的時候,大家都有遇過定義列舉資料的情境吧。 不過不管是 enum 和 literal 的方式其實都有些小缺點,以下推薦一個個人認為體驗更好的方式。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
本課程學習如何添加 Room 資料庫相關依賴庫配置。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
一般在使用 TypeScript 的時候,大家都有遇過定義列舉資料的情境吧。 不過不管是 enum 和 literal 的方式其實都有些小缺點,以下推薦一個個人認為體驗更好的方式。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
儲存庫 (Repository) 是檔案(File)的儲存區域。 在版本控制中,儲存庫是包含所有檔案的資料夾[1]。 每次改動檔案,你都可以選擇要不要儲存。 而那些有被處存的改動,就被稱為「提交 Commit」[2]。 而當一個儲存庫有多個開發者(Developer)在貢獻,
※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
本課程學習如何添加 Room 資料庫相關依賴庫配置。