2025年11月6日 星期四

AppSheet 教學:解決 RowNumber 警告,使用 UNIQUEID() 產生安全可靠的唯一主鍵

前言

在使用 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.

警告訊息翻譯與解析:

這段警告的核心意思是:

  1. 非穩定鍵值RowNumber 是一個「隱含」的鍵值,它會隨著資料的刪除或重新排序而改變。
  2. 多人協作風險:當多位使用者同時新增或刪除資料時,RowNumber 的對應關係會變得混亂。
  3. 資料錯誤風險:系統可能會因為找不到正確的 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 運行得更順暢、更安全。



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

AppSheet 教學:解決 RowNumber 警告,使用 UNIQUEID() 產生安全可靠的唯一主鍵

前言 在使用 AppSheet 開發應用程式時,我們經常需要為每一筆新紀錄產生一個獨一無二的編號,類似資料庫中的「自動流水號」。許多初學者會直覺地使用系統內建的  RowNumber   列 號  作為主鍵(KEY),但很快就會發現 AppSheet 跳出一個警告訊息,這不僅影響...