Excel 只是試算表不是資料庫!中小企業數位轉型:從 VLOOKUP 地獄到關聯式架構的重生之路
☰ 目錄 table-of-contents.md
Excel 是試算表,不是資料庫
如果你的客戶名單、庫存與訂單全靠一個叫 2025_客戶訂單_最終版_真的最後一版_v12.xlsx 的檔案撐著,那你面對的不是「還沒數位化」,而是「已經欠下技術債」。出路其實很明確:把核心業務數據從 Excel 搬進關聯式資料庫,靠「正規化」把人、事、物拆開再用 ID 串起來,就能一次解決資料不一致、無法多人協作、髒資料與沒有權限控管這四大痛點。
底下我會用一個訂單系統的實際 Schema,示範 Excel 思維與資料庫思維的差別;接著說明為什麼 WordPress 可以當成中小企業「去 Excel 化」的第一步,以及一套不會引發內部暴動的漸進式遷移步驟。
嗨,我是 Eric。在浪花科技打滾多年,我看過最恐怖的「鬼故事」通常不是伺服器被駭,而是上面那個檔名。這個檔案往往掌握著一家中小企業 (SME) 的命脈:老闆在用、業務在用、倉庫阿姨也在用。然後某天有人按錯一個鍵,或檔案因為太大而損毀,整間公司的運作就瞬間停擺。
「數位轉型」對許多台灣中小企業主來說,常被簡化成「把紙本變成 Excel」。但身為技術人員,我必須殘酷地告訴你:長期依賴 Excel 管理核心業務數據,是你公司最大的隱形技術債。
為什麼你的 Excel 會變成「地獄」?
Excel 是微軟最偉大的發明之一,它是最強大的「計算機」與「草稿紙」,但它絕對不是「資料庫」。當業務規模擴大,Excel 的先天缺陷就會暴露無遺:
- 資料不一致 (Data Inconsistency):張三在「客戶表」改了電話,但「訂單表」裡的電話還是舊的。因為 Excel 沒有「關聯性」,資料是死的,不會連動。
- 缺乏多人協作 (Concurrency Issues):雖然現在有 Google Sheets,但當兩個人同時篩選資料或修改同一列時,那個混亂程度簡直是災難。
- 資料髒亂 (Dirty Data):日期欄位有人填
2025/01/01,有人填114.1.1,甚至有人填「下週三」。這種資料無法被程式可靠地讀取,也就無法進行自動化分析。 - 缺乏權限控管 (Security):你很難設定「業務 A 只能看自己的客戶,不能看業務 B 的」。Excel 檔案一傳出去,就是全看光。
一個快速自我診斷的方法
不確定自己有沒有踩雷?問自己三個問題:同一筆客戶資料,是不是抄在好幾個分頁或好幾個檔案裡?你的表格是不是越用越往右邊長(商品 A、商品 B、商品 C……)?要算「某客戶今年總共下了幾張單」時,是不是得靠一堆 VLOOKUP 與手動篩選才湊得出來?只要有一個「是」,你就已經站在地獄的入口了。
資料庫思維:從「平面」到「立體」的進化
要擺脫 Excel 地獄,首先要改變的是「腦袋」。在 Excel 裡,我們習慣把所有東西塞在同一個 Sheet 裡,深怕切換分頁很麻煩。但在關聯式資料庫 (Relational Database) 的世界裡,我們講究的是「正規化 (Normalization)」。
正規化聽起來很學術,但它的核心精神只有一句話:同一件事實只存在一個地方。客戶的電話只存在「客戶表」、商品的價格只存在「商品表」,其他地方需要用到時,不是再抄一份,而是用 ID 去「指向」它。這樣一來,要改電話只改一處,全公司讀到的都是同一個正確答案——這正是 Excel 永遠做不到的事。
簡單來說,就是把「人」、「事」、「物」拆開來存,再用「ID」把它們連起來。
實戰案例:訂單系統的設計差異
假設我們要紀錄一筆訂單,Excel 的思維通常是這樣長長的一列:
[訂單編號] | [客戶姓名] | [客戶電話] | [商品A] | [數量A] | [單價A] | [商品B] | [數量B]...
這種結構看似直觀,但如果客戶買了 10 種商品,你的表格就會無限往右延伸;或者你得重複輸入 10 次客戶姓名,造成資料冗餘 (Data Redundancy)。冗餘不只是浪費空間,它真正的代價是:每一份重複的資料,都是一個未來會跟其他副本對不起來的未爆彈。
身為工程師,我們會這樣設計資料庫架構 (Schema):
1. 客戶資料表 (Customers)
只存客戶的基本資料,給每個客戶一個唯一的 customer_id 當主鍵 (Primary Key)。
CREATE TABLE customers (
customer_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
phone VARCHAR(20),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 商品資料表 (Products)
只存商品資訊,價格變動時只需改這裡,不用去翻歷史訂單。
CREATE TABLE products (
product_id INT PRIMARY KEY AUTO_INCREMENT,
sku VARCHAR(50) UNIQUE,
product_name VARCHAR(255),
price DECIMAL(10, 2),
stock_quantity INT
);
3. 訂單主表 (Orders) 與 訂單明細 (Order_Items)
這是最關鍵的一步。我們將「訂單本身」與「訂單買了什麼」分開。一張訂單可以對應多筆明細,這就是典型的「一對多」關係——而 Excel 那種往右無限延伸的欄位,本質上就是在硬塞一個它根本無力表達的一對多關係。
-- 訂單主表:紀錄誰買的、何時買的、目前狀態
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATETIME,
status VARCHAR(50), -- 待付款, 處理中, 已出貨
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- 訂單明細:紀錄這張訂單買了哪些商品
CREATE TABLE order_items (
id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT,
product_id INT,
quantity INT,
unit_price DECIMAL(10, 2), -- 紀錄當下購買價格
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
這裡有一個容易被忽略、卻非常重要的設計細節:order_items 裡為什麼要存 unit_price,而不是每次都去 products 表撈當前價格?因為商品價格會隨時間變動,但歷史訂單必須凍結成交當下的價格。把成交價寫進明細,才不會發生「半年前的訂單跟著今天調價而金額亂跳」的荒謬狀況。這就是資料庫設計裡「哪些資料該關聯、哪些該快照保存」的判斷力。
看到差異了嗎?在這種結構下,透過 customer_id 與 product_id 這兩個外鍵 (Foreign Key),我們確保了資料的唯一性與一致性。不管客戶改幾次電話,訂單永遠能關聯到最新的客戶資料;不管上了多少新品,資料庫結構都不需要改變——你只是多了幾列 (row),而不是被迫多開幾欄 (column) 或新增分頁。
WordPress 在中小企業數據化中的角色
「Eric,你講那麼多 SQL,我又不會寫程式,難道要去學寫 Code 嗎?」
別擔心,這就是為什麼我推崇 WordPress 作為中小企業數位化的第一步。WordPress 本身就是一個成熟的內容管理系統 (Content Management System, CMS),它的底層就是 MySQL 資料庫。換句話說,你在後台點點按按建立的內容,背後其實早就在跑關聯式資料表了——只是 WordPress 幫你把 SQL 藏了起來。透過一些工具,我們可以把上述資料庫概念「視覺化」:
- Custom Post Types (CPT):你可以建立「客戶」、「訂單」、「維修紀錄」等自定義內容類型,而不僅僅是內建的「文章」和「頁面」。每一種 CPT,概念上就對應到資料庫裡的一張表。
- Advanced Custom Fields (ACF):這就是你的欄位設計器。你可以強制規定日期格式、改用下拉選單,避免員工輸入錯誤的資料——這正是前面提到的資料驗證 (Data Validation),從源頭擋掉髒資料。
- User Roles & Capabilities:WordPress 內建強大的權限系統,解決了 Excel 檔案誰都能看的問題。
當然,WordPress 不是唯一解,規模或流程複雜到一定程度時,客製化系統會更貼合需求;但對「想跨出 Excel、又不想一步登天」的中小企業而言,它是門檻最低、回報最快的起點。
如何開始你的「去 Excel 化」工程?
請不要明天進公司就宣布「我們禁用 Excel」,那會引發暴動。數位轉型是一場溫柔的革命,建議依照以下步驟進行:
- 資料盤點與清洗 (Data Cleansing):先把你那堆亂七八糟的 Excel 整理好——統一格式、刪除重複項、補齊缺漏。這是最痛苦但最重要的一步,因為再漂亮的資料庫,灌進髒資料一樣是垃圾進、垃圾出。
- 定義核心業務邏輯:畫出你的業務流程圖。訂單進來後要去哪?庫存什麼時候扣?這一步決定了你的資料表要怎麼拆、怎麼關聯。
- 選擇工具並小規模導入:可以先從「客戶名單管理」或「派單系統」這類單一痛點開始,不要一次全部上線。利用 WordPress 搭建後台,或使用 Airtable 這類關聯式資料庫工具作為過渡。
- 引入自動化 (Automation):當資料結構化之後,你就可以用 n8n 串接 API。例如:WordPress 新增一筆訂單 → 自動發 LINE 通知給業務 → 自動扣除庫存。資料一旦乾淨且結構化,自動化才有立足點。
關於第一步的資料清洗,如果你的客戶資料量大又雜,現在已經可以借助 LLM(大型語言模型)來協助標準化欄位、辨識重複客戶、修補格式不一的紀錄,大幅縮短人工整理的時間。不過自動化前,仍要先人工抽樣驗證結果,避免把錯誤的清洗規則套到全部資料上。
Eric 的工程師碎碎念
我看過太多老闆,花大錢買了昂貴的 ERP 系統,結果員工嫌難用,私底下還是用 Excel 在做事,最後 ERP 變成只是一個「補登資料」的昂貴垃圾。系統是為了解決問題,不是製造問題。
真正的數位化,不是買軟體,而是建立「數據思維」。當你把資料從 Excel 的格子裡解放出來,變成資料庫裡流動的數據時,你才能真正看見公司的全貌,做出精準的商業決策。
這條路不容易,技術債欠久了總是要還的,但越早開始還,利息就越少。
延伸閱讀
常見問題
為什麼長期用 Excel 管理核心業務數據會出問題?
如何快速自我診斷公司是否已陷入 Excel 管理地獄?
資料庫的「正規化」是什麼意思?
訂單明細表為什麼要另外存單價,而不是每次去商品表撈當前價格?
不會寫程式的中小企業,為什麼可以用 WordPress 當去 Excel 化的第一步?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。