Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

資料庫入門:從原始資料到表格設計

最後更新:2025年12月31日資料庫

前面的文章我們學會了資料庫表格的基本結構:表格(Table)、欄位(Column)、列(Row)、格子(Cell)、值(Value)。

但在真實世界中,資料不會乖乖地以表格形式出現。你拿到的可能是一段文字描述、一份會議記錄、或是一堆散亂的筆記。

這篇文章要帶你練習:如何從雜亂的資料中,找出共同性質,整理成結構化的表格?

這是學習資料庫非常重要的技能,讓我們透過三個實際案例來練習。

案例一:商品清冊

原始資料

假設你拿到一本商品清冊,裡面這樣寫:

David 撰寫的鉅作《資料庫入門:從開始到放棄》共 335 頁,是在 2020 年 1 月出版。另外,這本篇幅只有 35 頁的《中華民國美學史》是 Emily 寫的,在 2025 年 3 月出版。

這段文字讀起來很混亂,資訊散落各處。我們要怎麼把它整理成表格?

找出共同性質

首先,標記出這段文字中的關鍵資訊:

  • 書名:資料庫入門:從開始到放棄、中華民國美學史
  • 作者:David、Emily
  • 頁數:335、35
  • 出版年月:2020年1月、2025年3月

這些就是「共同性質」——每本書都會有書名、作者、頁數、出版年月。

整理成表格

書名作者頁數出版年月
資料庫入門:從開始到放棄David3352020/01
中華民國美學史Emily352025/03
作者David
頁數335
出版年月2020/01
作者Emily
頁數35
出版年月2025/03

欄位設計的思考

整理的過程中,你可能會遇到一個問題:出版年月要怎麼存?

有幾種選擇:

  1. 存成「年月」格式:2020/01(目前的做法)
  2. 分成「年」和「月」兩個欄位:年=2020,月=01
  3. 存成完整日期:2020/01/01

哪一種比較好?這要看你之後的需求:

  • 如果你需要比較「哪本書先出版」,存成日期格式會比較方便,因為資料庫有內建的日期比較功能
  • 如果你把年和月分開存,之後要比較時就得先組合起來,比較麻煩
  • 但如果存成完整日期,你會遇到另一個問題:出版資訊通常只有年月,沒有「日」,你要補什麼?全部補 1 號嗎?

這種「欄位該怎麼設計」的問題,在資料庫設計中非常常見,沒有標準答案,要根據你的使用情境來決定。

案例二:會員名冊

原始資料

程式講師 David 在 3 月 15 日加入,並且成為高級會員。David 有介紹另外一個講師,設計講師 Emily,他加入的時間是 3 月 18 日,目前只是一般會員。

找出共同性質

標記關鍵資訊:

  • 職業:程式講師、設計講師
  • 名字:David、Emily
  • 入會日期:3月15日、3月18日
  • 會員等級:高級會員、一般會員

但等等,還有一個資訊:Emily 是 David 介紹的。

這個「介紹關係」也是重要資訊,我們需要記錄下來。

整理成表格

職業名字入會日期等級介紹人
程式講師David3/15高級NULL
設計講師Emily3/18一般David
名字David
入會日期3/15
等級高級
介紹人NULL
名字Emily
入會日期3/18
等級一般
介紹人David

兩個重要概念

概念一:空值(NULL)

David 沒有介紹人,那這格要填什麼?

在資料庫中,我們用 NULL 來表示「沒有值」,代表「這個資訊不存在」。

概念二:資料之間的關聯

注意看 Emily 那一列的「介紹人」欄位,填的是「David」。

這個「David」不只是一個名字,它其實是指向另一筆資料——就是上面那一列的 David。

這種「一筆資料指向另一筆資料」的關係,叫做資料關聯。在資料庫中非常常見,之後學到「關聯式資料庫」時會深入探討。

欄位設計的思考

「職業」這個欄位,要存成「程式講師」還是分成「講師」+「專長領域」?

  • 如果存成「程式講師」,之後要找「所有講師」就比較麻煩
  • 如果分成兩個欄位,查詢會更靈活

這又是一個沒有標準答案的設計問題,要看你的需求。

案例三:活動日誌

原始資料

現在有一個社交活動叫做「反社交社交俱樂部」,這個活動會在 4 月 1 日舉行,主持人是 David,而 Emily 已經被邀請來參加這場盛會。

找出共同性質

  • 活動名稱:反社交社交俱樂部
  • 日期:4月1日
  • 主持人:David
  • 邀請對象:Emily

整理成表格(初版)

活動名稱日期主持人邀請對象
反社交社交俱樂部4/1DavidEmily
日期4/1
主持人David
邀請對象Emily

看起來沒問題?但仔細想想…

一個欄位需要存多個值怎麼辦?

如果這個活動不只邀請 Emily,還邀請了「David」和「小美」呢?

「邀請對象」這個欄位要怎麼存?

方法一:全部塞在同一格

活動名稱日期主持人邀請對象
反社交社交俱樂部4/1DavidEmily, David, 小美
日期4/1
主持人David
邀請對象Emily, David, 小美

這樣做的問題:之後要查「David參加了哪些活動」會很麻煩,因為你要去「邀請對象」欄位裡面搜尋字串。

方法二:多加幾列

活動名稱日期主持人邀請對象
反社交社交俱樂部4/1DavidEmily
反社交社交俱樂部4/1DavidDavid
反社交社交俱樂部4/1David小美
日期4/1
主持人David
邀請對象Emily
日期4/1
主持人David
邀請對象David
日期4/1
主持人David
邀請對象小美

這樣做的問題:活動名稱、日期、主持人重複了很多次,浪費空間,而且如果要改活動名稱,要改很多列。

方法三:拆成兩張表

這是比較專業的做法,把「活動」和「參加者」拆成兩張表,用關聯連起來。

活動表:

活動編號活動名稱日期主持人
1反社交社交俱樂部4/1David
活動名稱反社交社交俱樂部
日期4/1
主持人David

參加者表:

活動編號參加者
1Emily
1小明
1小美
參加者Emily
參加者小明
參加者小美

這樣一來,活動資訊只需要存一次,參加者要加幾個都可以。兩張表透過「活動編號」關聯在一起。

這個技巧叫做「正規化」,我們之後會專門討論。

現在你只要知道:當一個欄位需要存多個值時,通常代表你的表格設計需要調整。

整理資料的兩個關鍵步驟

經過這三個案例,我們可以歸納出整理資料的兩個關鍵步驟:

步驟一:找出共同性質,決定欄位

從雜亂的資料中,找出每筆資料都會有的「共同性質」,這些就是你的欄位。

例如:

  • 商品都有:名稱、作者、頁數、出版日期
  • 會員都有:名字、職業、入會日期、等級
  • 活動都有:名稱、日期、主持人

即使目前只有一筆資料,你也可以想像「未來如果有更多資料,它們應該也會有這些共同性質」。

步驟二:思考資料之間的關聯

資料不是孤立的,它們之間會有關係:

  • Emily 的介紹人是 David → 會員之間有「介紹關係」
  • 活動的主持人是 David → 活動和會員之間有「主持關係」
  • 活動的邀請對象是 Emily → 活動和會員之間有「參加關係」

這些關聯要怎麼記錄在表格中,是資料庫設計的核心問題。

小結

這篇文章我們練習了如何把雜亂的資料整理成表格,重點包括:

  1. 找出共同性質 → 決定表格的欄位
  2. 思考資料關聯 → 決定資料之間如何連結
  3. 處理空值(NULL) → 有些欄位可能沒有值
  4. 一個欄位多個值的問題 → 可能需要調整表格設計

這些都是資料庫設計的基礎觀念。在之後的課程中,我們會學習更專業的設計方法,例如「正規化」,來解決這些問題。

下一篇文章,我們會開始學習如何操作資料庫中的資料——新增、查詢、修改、刪除,也就是所謂的 CRUD。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 案例一:商品清冊
  • 原始資料
  • 找出共同性質
  • 整理成表格
  • 欄位設計的思考
  • 案例二:會員名冊
  • 原始資料
  • 找出共同性質
  • 整理成表格
  • 兩個重要概念
  • 欄位設計的思考
  • 案例三:活動日誌
  • 原始資料
  • 找出共同性質
  • 整理成表格(初版)
  • 一個欄位需要存多個值怎麼辦?
  • 整理資料的兩個關鍵步驟
  • 步驟一:找出共同性質,決定欄位
  • 步驟二:思考資料之間的關聯
  • 小結