前言
在使用 AppSheet 開發應用程式時,我們經常需要為每一筆新紀錄產生一個獨一無二的編號,類似資料庫中的「自動流水號」。許多初學者會直覺地使用系統內建的 RowNumber 作為主鍵(KEY),但很快就會發現 AppSheet 跳出一個警告訊息,這不僅影響開發心情,更潛藏著資料遺失的風險。
本文將詳細解釋為什麼不該使用 RowNumber 當作主鍵,並提供一個更安全、更專業的解決方案:使用 UNIQUEID() 函數來自動產生唯一的文字主鍵。
問題點:為什麼不該用 RowNumber 當主鍵?
當您將 RowNumber 設為主鍵時,AppSheet 會在編輯器中顯示以下警告訊息:
Table '表格名稱' has an implicit key -- if multiple users insert or delete entries concurrently, data loss can occur. Updates may apply to the wrong record or could fail entirely on some data sources.
警告訊息翻譯與解析:
這段警告的核心意思是:
- 非穩定鍵值:
RowNumber是一個「隱含」的鍵值,它會隨著資料的刪除或重新排序而改變。 - 多人協作風險:當多位使用者同時新增或刪除資料時,
RowNumber的對應關係會變得混亂。 - 資料錯誤風險:系統可能會因為找不到正確的
RowNumber而更新到錯誤的紀錄,甚至導致資料遺失或更新失敗。
簡單來說,RowNumber 就像是排隊的號碼牌,有人離開隊伍後,後面的人號碼會往前遞補。這種不固定的特性,完全不適合作為辨識特定資料的「身分證號」(主鍵)。
解決方案:使用 UNIQUEID 函數
AppSheet 官方推薦的最佳實踐是使用 UNIQUEID() 函數來產生主鍵。
UNIQUEID() 的特性:
- 它會自動產生一個獨一無二的 8 位數亂數字串(例如:"4f1b8e7")。
- 這個字串是文字 格式。
- 它能確保在高併發(多人同時操作)的環境下,每一筆新紀錄都能獲得一個絕對不會重複的 ID。
接下來,讓我們一步步實作如何設定它。
實作步驟
步驟一:準備主鍵欄位
首先,請確保您的資料來源(如 Google Sheet)中有一個專門用來存放主鍵的欄位,例如「銷售紀錄編號」。
接著,在 AppSheet 編輯器中,進入 Data -> Columns,找到該欄位,並將其 TYPE 設定為 Text。
步驟二:設定為主鍵
將您準備好的「銷售紀錄編號」欄位勾選為 KEY。同時,請務必取消 RowNumber 欄位的 KEY 勾選。一個資料表中只能有一個主鍵。
步驟三:設定初始值
這是最關鍵的一步。找到「銷售紀錄編號」欄位,在其設定中找到 Initial Value 欄位,並填入以下公式:
=UNIQUEID()
這個設定告訴 AppSheet:每當使用者要新增一筆資料時,請自動執行 UNIQUEID() 函數,並將產生的唯一值填入此欄位。
步驟四:(選用)隱藏欄位,提升使用者體驗
UNIQUEID() 產生的亂數字串對系統來說很重要,但對使用者來說通常沒有意義且不美觀。為了讓輸入表單更簡潔,我們可以將它隱藏起來。
取消勾選該欄位的 SHOW? 選項。
如此一來,使用者在新增資料的表單中將看不到這個欄位,但 AppSheet 會在背景自動產生並儲存這個唯一的 ID。
步驟五:儲存變更
點擊右上角的 Save 按鈕儲存您的設定。
現在,當您新增一筆紀錄時,系統就會在您看不見的地方,為這筆資料賦予一個安全、可靠且獨一無二的主鍵,徹底解決 RowNumber 帶來的潛在問題。
總結
雖然使用 RowNumber 作為主鍵看似簡單,但它會為您的應用程式帶來嚴重的穩定性風險,尤其是在多人使用的情境下。養成使用 UNIQUEID() 來建立主鍵的好習慣,是開發一個健壯、可擴展 AppSheet 應用的基礎。透過本文的步驟,您不僅能消除惱人的警告,更能確保每一筆資料都擁有一個穩固的「身分」,讓您的 App 運行得更順暢、更安全。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。