別忘了設計「獨特值」欄位
「選單跳出來,選項都長一樣,要怎麼選啦.....Orz」
客戶名字太普遍,敲訂單時連結客戶資料,卻找不出是哪一個人下的單?如果不希望你的資料庫使用者陷入這種窘境,表單設計時,記得設一個擁有「獨特值」(unique value)的欄位,例如客戶編號(流水號),讓每一個「王大明」都可以被認得出來!
什麼是獨特值?
在我們討論的情境下,「獨特」就是「獨一無二」,「獨特值」就是指「在某個範圍內沒有重複、獨一無二的值」。
在 Ragic 的表單設計「獨特值」,意思就是該表單某個欄位的欄位值要是獨一無二、不重複的。最常見的獨特值是流水號,在 Ragic 可以用自動產生欄位值來達到。不過只要是獨一無二的值,自行編碼或自行輸入也可以,在 Ragic 你可以把欄位設為「不可重複」屬性來確保不輸入重複的值。
「獨特值」在資料庫中的意義
一般來說,我們要求要是「獨特值」的欄位,會是資料庫/資料表( Ragic 的一張表單)中,用來辨認每一筆資料的依據,這個依據也稱為資料表的「 Key 值」。
舉例來說,一張商品資料表單中有 100 筆商品資料,此時光從「庫存數量」欄位的欄位值( 5 個? 10 個?),或是「顏色」欄位的欄位值(白色?紅色?),我們看不出這是哪一筆資料,通常得從「商品編號」或「商品名稱」的欄位,才能辨認這其實是哪一筆資料/哪一個商品。
假如今天要管理商品資料的是一家小文具店,原本只有進 A 型號的鉛筆,店家在商品表單的「商品名稱」欄位將 A 型號鉛筆記載為「鉛筆」,之後進 B 型號的鉛筆時沒注意,又建立了一筆商品名稱同樣是「鉛筆」的資料,那麼店員在表單中以「商品名稱」為依據,搜尋/篩選 A 型鉛筆時,就會找到兩筆資料,分不出誰是誰;賣出一支 B 型號鉛筆時,也會不知道在哪一筆扣庫存數量。
因此,作為資料辨認、比對基準的 Key 值,應該要是獨一無二、不可重複的。以前面的例子來說,第一種調整方法就是「商品名稱」改成「 A 型鉛筆」、「 B 型鉛筆」,讓「商品名稱」都是獨特值,而第二種更便於管理的方法,就是另外把以流水號產生的「商品編號」欄位當 Key 值,找商品和扣庫存時都以商品編號為依據,人為失誤的機率就更小了。這就是前面建議大家幫「有很多王大明」的客戶表單,設計「客戶編號」獨特值欄位的原因了。
也許你會說:「我只要看這個王大明是地址在台北市的王大明,那個王大明是地址在台中市的王大明,我就知道誰是誰了,不會分不出來呀!」
但問題是:首先,當你的客戶只有 100 個時,或許可以這樣做,但成長到一千、一萬、一百萬時,你還分得出來嗎?其次,用肉眼和回憶一一辨認誰是誰,浪費時間出錯機率又高,這是我們最不鼓勵的資料處理方法。
最重要的是,這個辨認的依據不只是要給使用者看,很多時候也是要讓電腦在執行我們希望的自動化任務——例如叫出某筆資料、找出某筆資料的某個欄位、更新某些條件的資料——時,能夠根據 Key 值來比對資料,而在沒有做其他設定的條件下,電腦並不會跟你心靈相通到知道要怎麼從其他各種不同條件裡確認。
哪些狀況下,電腦得幫你比對/尋找/更新某筆特定的資料,以至於非常需要「 Key 值」/「獨特值」呢?接下來我們以 Ragic 為例一一解說。
在 Ragic ,哪些情境特別需要「獨特值」/「 Key 值」?
連結與載入
敲訂單時點選一下「客戶編號」,系統就跳出「客戶資料」選單,點選之後自動載入「客戶姓名」、「地址」、「電話」,這是 Ragic 連結與載入的經典應用,在這裡「客戶編號」是「連結欄位」,「客戶姓名」、「地址」、「電話」是「載入欄位」。
當你點選「連結欄位」時,其實就像要從一個選單裡選出一個「選項」(在此情境選單=連結載入的來源表單),如果選單裡出現兩個一樣的選項(非獨特值),點選資料的人就會難以判斷,這就是文章一開始「選單跳出來,選項都長一樣,要怎麼選啦.....Orz」的問題。因此,我們都建議「連結欄位」要是「獨特值」欄位。(這部分的延伸閱讀可以參考這裡)
註:如果你原本已用非獨特值欄位,建立了連結與載入關係,之後希望修改的話,請用這個方法拖曳改變參照欄位。不需要將原本的連結關係刪除重建哦(刪除重建比較容易損失原本的連結欄位資料)。
匯入
當你準備將 Excel 或 CSV 檔的資料匯入 Ragic (或其他表單軟體)時,說明文件通常會要求你要在第一欄放上一個獨一無二的「Key Field」,這其實就是我們本文討論的「 Key 值」/「獨特值」欄位。
這個 Key 值在匯入時選擇「資料覆蓋」原則為「更新舊資料」模式時,特別重要。從外部將資料匯入 Ragic 時,可以選擇要單純的將所有資料按照欄位倒進去(產生新資料),或是逐一比對匯入表單中原本有的資料,只匯入該表單沒有的資料,不匯入重複的資料。此時,系統需要比對哪筆資料是哪筆資料,因此就需要 Key 值。
任何「需要辨認誰是誰」的場合
例如「更新別張表單欄位值」,需要去比對要更新另一張表單的哪筆資料。其實,基本上,我們會建議無論如何,盡量都在表單中建立一個「 Key 值」欄位,反正,用不上也沒有壞處,但有需要卻沒有的話卻很麻煩啊!
注意!請記得「整張表單該欄位都沒有重複值」才叫獨特值
舉一個客戶的例子跟大家說明。(為保護客戶隱私~?案例是改編的,不用對號入座噢!)
我們專業的客服建議客戶的「訂單」表單要有一個獨特值欄位「訂單編號」,可以是流水號組成的,也可以自己編碼、用字串公式組合,但必須是「獨特值」。
客戶:「那我就用『訂單日期』加上『商品編號』當訂單編號~『商品編號』是獨特值~」
客服:「......」(不同客戶同一天訂同一個商品,訂單編號不就重複了?)
小秘訣:如何在 Ragic 幫你的資料找一個獨特值欄位?
你可以在列表頁上,使用加總與分析功能,看看是否有哪個欄位每個欄位值的筆數都是 1 ,是的話就代表是獨特值。用這個方法也可以檢查重複值。不過請記得,大多時候資料會是隨時新增 / 變動的,某個欄位現在在你的表單裡是獨特值,不代表你之後一定 100% 不會新增重複資料,因此加總與分析找出可能的獨特值之後,還是要搭配實際流程以及適當的檢核機制(例如「不可重複」屬性)才能決定。