更新於 2024/12/23閱讀時間約 5 分鐘

Notion DB 的動態與靜態 ID

前言

在資料庫管理中,「唯一值」對於資料編號非常重要,而這種唯一值必須符合兩個特性:

  • 不可重複
  • 不可空白

以前,我們最常使用的是 Notion Things 提供的動態 ID 設置方法,不過,官方在 2023 年 05 月(更新編號2.30)更新了ID()屬性,實現了不可重複且不空白的 ID 設置,你可以根據自己的需求選擇使用哪種方法,下面我們來細說細說。

創建 ID 的方法

資料庫的 ID 屬性

Notion 中的ID屬性是一種簡便的自動編號屬性,除了可以自動生成數字外,還能在前方加入資料庫的自訂前綴。

此設置方式雖然簡單,但其缺點在於,它生成的 ID 是靜態的。如果在資料庫中刪除某些項目,該項目的 ID 編號不會重新分配,留下數字上的空缺。當然,有些時候這樣的空缺是必要的,依照每個人的需求而定。

動態 ID 的設置

如同前面提到的,這個動態 ID 的設置方式是在 Notion Things 的文章中學習到的,我們除了要學習他的架構以外,還要把這個公式升級為 2.0 的編寫模式。

  • 使用公式 id() 來生成每筆資料的「Long ID」。
  • 建立一個母資料庫,將所有 Long ID 集中在同一個列表中。
  • 由於 Long ID 是按順序排列的,接下來可以使用正則表達式(Regex)來去除無關字符,並計算其中逗號的數量,再加一就能得到動態的 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」。

優缺點整理

範例頁面

動態與靜態的 ID

心得分享

注意到這篇中運用的正則表達式 (Regex) 和〈Notion Formula 2.0 § 找重複資料〉中的技巧相似嗎?🤭或許 Ben Smith 在撰寫公式時也參考了 Notion Things 文章裡的寫法!

自己平時使用 ID 屬性的機會不多,即使使用,也多選擇官方 ID 設置,因為它已滿足我對資料唯一性和不空白的基本需求。此外,由於 ID 屬性通常並非顯示重點,我也不會過於在意其空缺。

其實這篇文章是我臨時加的,發現時常有新的 Notion 玩家在社群中詢問 ID 設置的相關問題,這或許是大家在玩 Notion 一段時間後,開始對資料庫管理提出更高要求吧!希望這篇能對大家有幫助✨,也希望大家都玩得開心❤️。

參考資料

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.