資料庫設計流程

更新於 發佈於 閱讀時間約 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 的關係限制

  • Partial 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)






留言
avatar-img
留言分享你的想法!
Bicky-avatar-img
發文者
2024/11/19
從 ER 圖到 Schema 的轉換教學提及了這篇文章,趕快過去看看吧!
avatar-img
越南放大鏡 X 下班資工系
14會員
61內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/24
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/21
本文介紹行動通訊網路的演進歷史,從1G到5G,並說明ITU與3GPP在制定通訊規格上的重要角色,以及5G的三大關鍵應用場景:URLLC、eMBB和mMTC。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
2025/04/11
這篇文章說明網路的七層模型、IP 位址、通訊埠、TCP/UDP 協定、HTTP 協定、HTTP 狀態碼以及 WebSocket,並解釋它們之間的關係與互動方式。文中包含許多圖表和範例,幫助讀者理解這些網路概念。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
※ Schema 設計 ● 什麼是Schema? Schema 是用來描述資料庫內的表格結構、欄位格式以及表格之間的關聯。它定義了資料庫的邏輯結構,確保資料的組織和存取方式一致。 思考點:資料以什麼「形式」保存在資料庫? 資料在資料庫中以多種形式保存,主要包括以下幾種: 表格 (Table
Thumbnail
※ Schema 設計 ● 什麼是Schema? Schema 是用來描述資料庫內的表格結構、欄位格式以及表格之間的關聯。它定義了資料庫的邏輯結構,確保資料的組織和存取方式一致。 思考點:資料以什麼「形式」保存在資料庫? 資料在資料庫中以多種形式保存,主要包括以下幾種: 表格 (Table
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
有趣的是,Model 其實沒什麼嚴格的定義,所以每個人對 Model 的解讀也不盡相同,有人覺得資料怎麼儲存屬於 Model 的一部份 (受 ORM 工具的影響),有人覺得工作流程 (workflow) 是 Model 的一部份,我個人也有自己的想法,而且隨專案的規模和特性,也不是總是一樣的。
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
一、泛用型的電子公文系統是為了解決底下幾種痛點: 痛點一:為了不同公文流程就要開發不同程式針對不同的公文流程常常因為資料格式的不一致,就要設計好幾種Table,哪怕只是差異一點點的欄位都必須重新設計好幾種不同的流程做因應,一般中小型的公司並沒有辦法有太多的軟體人員做開發...
Thumbnail
一、泛用型的電子公文系統是為了解決底下幾種痛點: 痛點一:為了不同公文流程就要開發不同程式針對不同的公文流程常常因為資料格式的不一致,就要設計好幾種Table,哪怕只是差異一點點的欄位都必須重新設計好幾種不同的流程做因應,一般中小型的公司並沒有辦法有太多的軟體人員做開發...
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在進入主題之前建議先行閱讀「【程式語言 - Go】來認識Google開發的程式語言…」,初步認識一下Go語言是什麼? 容不容易學習? 才能夠更快的體會此篇章的目的。 當我們在進行軟體開發時,常常會需要有背後的資料庫系統來儲存我們的資料,而資料庫系統也會隨著時代的演進,進行大幅度的更新,那在這樣
Thumbnail
在進入主題之前建議先行閱讀「【程式語言 - Go】來認識Google開發的程式語言…」,初步認識一下Go語言是什麼? 容不容易學習? 才能夠更快的體會此篇章的目的。 當我們在進行軟體開發時,常常會需要有背後的資料庫系統來儲存我們的資料,而資料庫系統也會隨著時代的演進,進行大幅度的更新,那在這樣
Thumbnail
最近接獲一個任務,該任務的目標是替一個即將進入正式部署階段的系統,導入一個 database migration tool,以下是此任務整個思考決策的邏輯以及正式進行時技術上比較值得和大家分享的小細節。 系統背景 資料庫的設計方式,目前常見會有兩種方向,code first 以及 database
Thumbnail
最近接獲一個任務,該任務的目標是替一個即將進入正式部署階段的系統,導入一個 database migration tool,以下是此任務整個思考決策的邏輯以及正式進行時技術上比較值得和大家分享的小細節。 系統背景 資料庫的設計方式,目前常見會有兩種方向,code first 以及 database
Thumbnail
ORM 中文為「物件關聯對映」,是一種介於程式與DB中間的程式設計技術,將程式語言轉換成SQL語言來對DB做操作。
Thumbnail
ORM 中文為「物件關聯對映」,是一種介於程式與DB中間的程式設計技術,將程式語言轉換成SQL語言來對DB做操作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News