在資料庫管理中,「唯一值」對於資料編號非常重要,而這種唯一值必須符合兩個特性:
以前,我們最常使用的是 Notion Things 提供的動態 ID 設置方法,不過,官方在 2023 年 05 月(更新編號2.30)更新了ID()
屬性,實現了不可重複且不空白的 ID 設置,你可以根據自己的需求選擇使用哪種方法,下面我們來細說細說。
Notion 中的ID
屬性是一種簡便的自動編號屬性,除了可以自動生成數字外,還能在前方加入資料庫的自訂前綴。
此設置方式雖然簡單,但其缺點在於,它生成的 ID 是靜態的。如果在資料庫中刪除某些項目,該項目的 ID 編號不會重新分配,留下數字上的空缺。當然,有些時候這樣的空缺是必要的,依照每個人的需求而定。
如同前面提到的,這個動態 ID 的設置方式是在 Notion Things 的文章中學習到的,我們除了要學習他的架構以外,還要把這個公式升級為 2.0 的編寫模式。
id()
來生成每筆資料的「Long ID」。/* 子資料庫的 Long ID */
id()
/* 母資料庫將所有 ID 集結成列表*/
map(prop("子資料庫"), current.prop("Long ID"))
/* 子資料庫的動態ID */
lets(
/* 顯示 ID 列表 */
ID_List, map(prop("母資料庫"), current.prop("ID 列表")),
/* 將列表中相同資料變成 ★ 號 */
替換相同, ID_List.replaceAll(prop("Long ID").format(), "★"),
/* 去掉所有的資料,保留 , 號 */
逗號, 替換相同.replaceAll("[^★]*$", "").replaceAll("[^,]", ""),
/* ID 序號 */
ID, 逗號.length() + 1,
ID
)
此方法有兩個缺點:執行速度稍慢(因需要串接不同的資料庫),且需自行撰寫公式。
然而,它的優點在於具有動態性——當資料刪除時,ID 會自動遞補。以下圖為例,當刪除動態 ID 為 4(官方 ID 為 6)的項目後,動態編號會自動遞補,而官方的靜態 ID 則直接缺少了「編號 6」。
注意到這篇中運用的正則表達式 (Regex) 和〈Notion Formula 2.0 § 找重複資料〉中的技巧相似嗎?🤭或許 Ben Smith 在撰寫公式時也參考了 Notion Things 文章裡的寫法!
自己平時使用 ID 屬性的機會不多,即使使用,也多選擇官方 ID 設置,因為它已滿足我對資料唯一性和不空白的基本需求。此外,由於 ID 屬性通常並非顯示重點,我也不會過於在意其空缺。
其實這篇文章是我臨時加的,發現時常有新的 Notion 玩家在社群中詢問 ID 設置的相關問題,這或許是大家在玩 Notion 一段時間後,開始對資料庫管理提出更高要求吧!希望這篇能對大家有幫助✨,也希望大家都玩得開心❤️。