回文章列表
資訊顧問 2026-07-16 3 min read

健身工作室系統崩了三次才學會的教訓:資料一致性

一家連鎖健身工作室的會員點數與商品同步系統踩過的雷,從外來鍵衝突到生日欄位被偷換,拆解資料一致性問題背後的工程真相。

  • 多分店系統各自建資料庫時,同一張課程表的內部代號可能完全不同,靠代號硬對接遲早炸
  • 促銷折扣的計算基準沒講清楚,門檻和實際扣款會對不起來,帳務永遠有人在吵架
  • 看不見的欄位限制和靜默失敗最可怕,系統會偷偷把錯的資料存成看起來正常的樣子
健身工作室系統崩了三次才學會的教訓:資料一致性

某家連鎖健身工作室找上我們時,狀況是這樣:總部系統和分店系統各自獨立建了好幾年,直到要打通會員資料、課程庫存、點數回饋,才發現根本是兩個世界硬湊在一起。這篇整理三個真實踩過的雷,全部去識別化,但邏輯保留,因為這些坑,任何做多據點、多系統整合的老闆都可能踩到。

雷一:兩邊資料庫的「內部代號」從來不是同一套

總部系統和分店系統各自手動建課程型別的時候,系統內部給的識別碼是不一樣的,這很正常,因為是兩個人在兩臺機器上各自建的。問題是同步程式一開始直接把識別碼原封不動搬過去,對方資料庫一插入就違反外來鍵限制,直接跳錯。

解法不是硬修那筆資料,而是換一套雙方都認得的「代號字首」當溝通語言,傳送端帶著代號,接收端拿代號去查自己本地對應的識別碼,查不到才退回舊邏輯檢查。這種設計的重點是:跨系統同步永遠不要相信對方的內部編號,要用雙方都懂的業務代號當橋樑。

雷二:促銷門檻用錯基準,帳自己對不起來

這家工作室做過「滿額送點數」活動,原本門檻是用商品原價乘數量去算,結果客人用了折扣券之後,門檻計算跟實際付款金額完全脫鉤,導致有人明明沒付到門檻金額卻拿到回饋,客服天天在處理爭議。

  • 把門檻判定改成用「訂單淨實付金額」為基礎,反映真實付款狀況
  • 用「命中商品原價佔全單原價的比例」去拆算應得回饋,維持分攤邏輯一致
  • 預覽階段付款金額還沒確定時,退回保守估算,不亂給承諾

這件事給的教訓很直接:任何跟金錢有關的計算邏輯,一定要先確認「基準是什麼」,用錯基準不是程式錯,是需求沒講清楚,程式只是老實把錯誤放大而已。

雷三:欄位長度不夠,系統直接把你的訂單吃掉

這家工作室的線上結帳系統有陣子偶爾會莫名其妙擋單,查了半天發現是行銷廣告帶來的追蹤引數太長,超過資料庫欄位上限,系統存檔時直接丟例外,訂單就這樣消失在使用者眼前,客人只看到結帳失敗,完全不知道發生什麼事。

更誇張的是另一個案例:會員在某些嵌入式瀏覽器裡填的生日格式不對,系統沒有跳錯,而是默默把生日存成一個假日期,之後這筆假資料還會被當成正常資料顯示在會員資訊裡,形成一個沒人發現的長期汙染源。

系統不會在你面前失敗,它只會在你看不到的地方,把錯的資料存成正常的樣子。

顧問角度:資料一致性不是技術問題,是治理問題