[數據分析#74] 資料表的架構是什麼?學數據分析之前一定一定要搞懂「資料模型」的概念!(面試考題必考!)

資料怎麼產生?怎麼紀錄的?

要講資料怎麼產生?怎麼紀錄的?為了不要讓大家想睡覺,我來舉一個非常簡單的例子吧!

大家一定都用 App 訂過外送吧!不管是 UberEATS、Foodpanda 都是!

我們今天就用「訂外送」跟「資料之間的關係」,來解釋初學者學數據分析之前,一定要搞懂的資料表的架構,因為這會跟接下來要講到的「資料模型 (Data Model)」很有關係~

訂外送的流程跟資料表之間的關係

  • 假設 Lisa 今天中午想要點外送,他開啟了外送 App,選擇了一家拉麵店,點了一碗叉燒拉麵
  • 他在 App 上提交訂單的時間是 12:00,系統會記錄下「下單時間」是 12:00,系統收到之後,立刻確認,系統會記錄下「訂單成立時間」是 12:00,並標示這筆訂單已經成立,也就是「訂單是否成立」標為 1 (1 為有,0 為沒有)
  • 這時拉麵店收到了 Lisa 的外送訂單,在 12:02 時,拉麵店看到訂單,決定接單做料理。這時會記錄下「商家接單時間」是 12:02,並標示商家有接這單,「商家是否接單」是 1
  • 系統同時需要請外送員前往餐廳取餐,在 12:05 時外送系統派單給一位外送員,外送員在 12:06 時接單!系統記錄下「系統派單時間」、「車隊接單時間」
  • 外送員先在 12:15 時去拉麵店取了料理,然後騎車送到 Lisa 公司,抵達時間是12:25。最後在 12:25 時將料理交给了 Lisa 。這時整個外送過程完成,外送員會完成訂單,時間記錄為 12:26

所以這個資料表記錄了 Lisa 這筆外送訂單從開始下單,到餐廳接單烹調、外送員取貨送貨,最後完成交貨的整個流程中每個時間點和狀態。

資料模型、資料架構的基礎:下單的過程怎麼紀錄在資料表中

流程怎麼轉換成資料表 (Table, Data Mart)?

欄位名稱欄位說明
消費者 id下單的用戶 id
下單時間用戶在 App 上點擊下單的時間點
訂單成立時間系統接受到這筆訂單的時間
訂單是否成立訂單是否成功傳入系統,1 表示成功
商家 id餐廳的 id
商家接單時間餐廳接到訂單的時間
商家是否接單餐廳是否接單烹調,1 表示接單
車隊id車隊的 id
系統派單時間系統將訂單分配給外送員的時間
車隊接單時間外送員接到訂單的時間
車隊取貨時間外送員到店取餐的時間
車隊送貨開始時間外送員開始送餐的時間
車隊抵達時間外送員抵達客戶地點的時間
車隊交貨時間外送員完成交貨的時間
訂單完成時間整個訂單外送完成的時間
訂單是否完成訂單的外送是否成功完成,1 表示成功

所以剛剛解釋的流程,就會一筆一筆的根據他所屬的欄位,記錄在資料表裡面!

資料模型、資料架構的基礎:下單的過程怎麼紀錄在資料表中,並且我們怎麼快速知道資料表裡面的欄位

什麼是資料模型 (Data Model)?

在剛剛的這張大表裡面,記錄了完整的行為對吧!

但通常在公司的資料庫裡面,如果要用一張大表來記錄「所有行為」,可能會需要幾千個欄位,這樣就太複雜了!運算起來還很浪費時間跟效能,所以這時候「資料模型」的概念就會導入囉!

怎麼用外送流程大表規劃資料模型?

剛剛這張大表,可以這樣設計資料模型:

  1. 用戶 (User) 資料模型:
    • 用戶 ID
    • 用戶名稱
    • 電話號碼
    • 地址

這張表記錄了每個訂單的用戶基本訊息

  1. 商家 (Restaurant) 資料模型:
    • 商家 ID
    • 商家名稱
    • 菜單
    • 地址
    • 電話

這張表記錄了提供外送服務的餐廳基本訊息

  1. 訂單 (Order) 資料模型:
    • 訂單 ID
    • 用戶 ID (與 User 表互相關聯)
    • 商家ID (與 Restaurant 表互相關聯)
    • 下單時間
    • 送達時間
    • (還有其他各種時間……)

這張表記錄了一個外送訂單的主要信息,同時通過 User 和 Restaurant 的 ID,記錄了這張訂單是哪個用戶下的單、並且是跟哪個餐廳訂購的。

這就是一個簡單的資料模型例子!!它定義了主要實體 (User、Restaurant、Order) 的結構和關係,可以更好的描述和管理這個外送 App 的核心資料!

資料模型、資料架構的基礎:如何從原始資料流程的大表,變成資料模型後的樣貌

為什麼要資料模型?不能就用大表嗎?

一開始其實我也有這個疑問~今天簡單講一下核心原因!為什麼要用資料模型,而不是只用一個大表記錄所有行為的資料呢?

主要有以下幾個考量:

  1. 降低資料重複:如果都寫在一個大表裡,會出現很多重複的數據。例如:用戶名、商家名這些資訊會重複記錄,浪費儲存空間
  2. 加快查詢速度:在數據量大的情況下,只用一個大表查詢會很慢。當今天拆分為資料模型後,可以對各表做優化,加快我們在資料庫裡面的查詢
  3. 維護方便:如果要修改某個欄位 (屬性),資料模型只要調整某個實體表 (User、Restaurant、Order) 即可,如果只用一個大表記錄的話,要全部調整超麻煩
  4. 確保數據一致性:資料模型可以設定關聯規則、限定資料值、確保數據的一致性。一個大表很難同時滿足這些限定條件

所以綜合來說,使用資料模型可以更好的「組織資料結構」,也讓數據處理可以更高效,這就是數據工程中的常見的實踐方法!

數據分析師為什麼一定要懂資料模型?

歸結來說,有以下幾個原因:

第一:一看資料,就懂業務!

其實整間公司的業務 (行銷、業務、營運、財務…) 都可以從資料模型一探究竟!

資料模型描述的不僅僅是資料本身,也反映了資料與業務之間的對應關係。如果可以知道資料模型跟公司業務是有關係的,數據分析師就可以更快的只透過「資料模型」就了解業務本身!

比方說,如果一個對於外送流程完全不懂的人,他可以從剛剛我們歸納出來的「資料模型」就知道一個訂單的流程:會包含客戶、餐廳、外送員、訂單本身。

這樣分析資料的時候,就會知道有哪些切入角度可以應用!

第二:不要 Join 錯喔!

大家應該也知道 SQL 是查詢資料庫的標準語言吧!

如果不知道資料模型的概念,就很可能不知道資料表之間的關聯,如果不知道資料表之間的關聯,可能就不知道怎麼「Join」才可以把資料串聯在一起,如果不知道如何串聯?那別談後續的分析了!!

所以資料模型是搞懂「SQL Join」背後的底層邏輯~

結論:資料架構、資料模型,講的都是這些基礎的延伸!

總之,理解業務跟數據之間的關係,才是數據分析師的「基本工作內容」!

透過「資料模型」來了解業務跟數據之間的關係,一舉數得的原因是:

  1. 資料模型是優化過後的數據儲存方式
  2. 資料模型本身就可以知道業務跟數據之間的關係

如果不理解資料模型,數據分析師很難完成分析的工作,也就無法提供有價值的分析建議。所以我會建議,如果你想成為數據分析師,在學所有工句之前,一定要知道資料的結構、資料模型的概念!

【1 對 1 免費諮詢】數據分析師 0~1 培訓班陪你一路到轉職成功!

hi 我是 Lisa

你也是 0 經驗、沒有相關背景,但也想要轉職數據分析師,或運用數據分析,提升在領域的專業度嗎?

-

你是否也覺得,數據分析的網路學習資源很多,但是多到不知道從哪裡開始?

學了很多工具,但學完了,問題才真正開始,不知道業界怎麼使用?又該如何面臨工作跟面試?

-

我在 2019 年從營運專員的職位轉職到數據分析師

在這之後,因為數據分析,也讓我快速建構不同領域的知識:行銷、營運、商業策略、產品、網頁

轉職過程中,花了很多時間成本摸索

我發現,學數據分析最快的方式是:

  1. 確認自己跟市場需求之間的差距:訂定轉職策略及了解數據分析師的工作方式
  2. 以業界應用的角度學習工具:包括數據工具及分析用思維架構,並且如何高效運用
  3. 建立一個商業上的真實專案,並且得到回饋:打造屬於你及貼合職缺需求的作品集和專案
  4. 打造一個高效履歷跟面談:透過高價值包裝術拿下面試、成功獲得數據行業的門票

當初如果我有這套系統思維,應該可以在短時間內轉職,馬上拿到進入業界的門票

-

現在,我想把這套完整課程分享給你

這是專門為了 0 經驗、沒有相關背景的轉職者所設計

不需要去考研究所、不需要花大錢準備出國讀書

可以用最快的時間準備轉職、拿到門票!

-

如果你正在準備轉職數據分析師,且試圖找過解決辦法卻始終治標不治本!歡迎跟我預約免費 1 對 1 諮詢,我會在諮詢時,了解你的需求並且評估我是否可以協助到你!

電子書 職場人必學的數據分析術

Lisa Wu

Hi 大家好!我是喜歡探索身心靈健康及平衡的數據分析師 Lisa Wu!這個網站會幫助你:利用數據分析 (理性) 及 身心靈平衡 (感性) 的系統,去達成人生目標!如果你對我的人生系統工具有興趣,歡迎聯繫我:couplehonest@gmail.com