Supabase的關聯表格、外來鍵 | Foreign Key

更新 發佈閱讀 7 分鐘
Supabase的關聯表格、外來鍵 | Foreign Key封面

Supabase的關聯表格、外來鍵 | Foreign Key封面

在前面的文章中已經在supabase中完成了基本的操作,甚至已經完成訂閱即時更新的功能,接著本篇文章要介紹的是如何在supabase裡設定與使用外來鍵,包含如何在客戶端撰寫查詢外鍵的SQL,馬上開始。

如果還沒有閱讀實時更新功能文章的話可以點擊下方去閱讀。

supabase的實時更新 | Subscribe to channel

嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supabase的進階功能應用。

外來鍵(Foreign Key)介紹

在使用supabase是用PostgreSQL作為資料庫使用,所以外來鍵的概念是需要具備的知識。
在網路上已有相當多外來鍵的說明,以下是我問Bing AI得到有關外來鍵的解釋內容:

外來鍵(Foreign Key)是一種資料庫的約束條件,用於建立兩個資料表之間的關聯。外來鍵的值必須參照另一個資料表的主鍵(Primary Key)或候選鍵(Candidate Key),或者為空值。外來鍵的作用是保證資料的一致性和完整性,避免出現不符合邏輯的資料。

為表格設定外來鍵

事前準備

要設定外來鍵(Foreign Key)的首要條件就是要有兩個表格、,我的構思是為前面使用的todos表格新增一個擁有者的欄位,用來外聯新增這筆代辦事項的使用者資料,這樣就可以一次知道這筆待辦事項與這筆資料擁有者的詳細資料。

回到supabase的後台,馬上就先新增一個簡單的members,主要有id欄位還有基本的email欄位,並且手動新增幾筆假資料,大概就會像圖中一樣。

原後台表格狀態

原後台表格狀態

新增外來鍵欄位

接下來切回todos表格,為表格新增一個新增欄位,用來關聯members表格,直接點擊欄位最右邊的+來新增,欄位的名字就叫做owner吧,表示是代辦事項擁有者的意思,這時候就要點擊畫面中間的Add foreign key relation的按鈕來新增外來鍵。

為todos表格新增外來鍵的新欄位

為todos表格新增外來鍵的新欄位

按了按鈕以後會跳出另一個面板設定,步驟也想當簡單,只要把表格的地方選到剛剛新增的表格members,主要關聯的欄位就直接設定id欄位。

設定外來鍵關聯

設定外來鍵關聯

另外介紹一下最下面的下拉選單,內容是詢問說當這個關聯的表格中的那一筆資料被刪除的時候,這個關聯關係要如何處理,目前可以先隨意設定一個動作,因為這兩個表格的刪除並不會影響練習,這個設定主要是因為有些資料有上下關係,資料庫會預設保護你誤刪一些上層資料,讓引用上層資料的下層資料失去關聯。

設定好外來鍵

設定好外來鍵

設定完成以後可以在原畫面中看到有下方圖的內容,按下送出即設定完成,接下來手動把外來鍵的內容填上去就完成兩個資料表格的關聯關係,完成的todos表格會變成下圖這樣。

設定完成以後的表格

設定完成以後的表格

直接查詢表格關聯

文件的說明

要使用外來鍵的話就要先看一下官方文件對於這個查詢的說明,在supabase的官方文件中有一段範例程式碼,內容如下。

let { data: todos, error } = await supabase.from("todos").select(`
some_column,
other_table (
foreign_key
)
`);


初次看這段程式碼的感覺就是這麼簡短?,看起來也不需要把關聯的欄位給寫出來就可以直接查詢外聯表格的內容,實際上的操作也幾乎是這樣,但在操作上卻踩了很多坑卡了很久。

客戶端查詢外來鍵表格

這段的撰寫邏輯,首先我畫面還是要查詢原本todos的所有欄位內容,所以星號保留,第二步就是指定查詢外聯表格名稱members,裡面所有欄位都查詢所以也用星號,所以整段內容如下:

const { data, error } = await supabase.from('todos').select(`
*,
members (
*
)
`)

換個方式解釋的話,先把select()裡面改用反引號的字串,原本要查詢的欄位保持不變,多個欄位則用逗號隔開,換行直接指定外聯表格名稱並配上括號,括號內就和原本查詢欄位的方式一樣,每個欄位用逗點分隔。

在前端直接執行就可以把這兩個表格的所有欄位給查詢回來,返回的資料格式如下:

[
{
id: 7,
user_id: "9fe1408a-b5d8-4fd8-92aa-0c631e514c29",
task: "task 3",
is_complete: false,
inserted_at: "2023-08-16T09:46:05.017571+00:00",
owner: 2,
members: {
id: 2,
created_at: "2023-08-02T06:37:22.546873+00:00",
email: "[email protected]",
},
},
{
id: 6,
user_id: "9fe1408a-b5d8-4fd8-92aa-0c631e514c29",
task: "task 2",
is_complete: true,
inserted_at: "2023-08-16T09:46:05.017571+00:00",
owner: 1,
members: {
id: 1,
created_at: "2023-07-28T03:54:25.544457+00:00",
email: "[email protected]",
},
},
];

可以看到在撰寫關聯表格的時候並不需要額外撰寫程式或是指定參數,只需要事前在supabase後台把表格間的關聯關係都設定完成,就可以輕鬆地在前端查詢各個表格的外聯關係。

畫面顯示

現在每次查詢的資料都有附帶擁有著的資料,於是就延續之前的畫面把顯示的欄位修改一下,修改成顯示擁有者的email,這樣就完成一個資料的外來鍵和外聯表格的顯示。

前端畫面直接顯示關聯表格

前端畫面直接顯示關聯表格

總結

外來鍵對supabase來說是一個非常重要的功能,也同時在其他關聯式資料庫都有一樣重要的地位,在supabase中前端在查詢外聯表格的時可以透過後台設定完成外來鍵的欄位,然後在前端直接選取外聯表格的欄位查詢,相當直覺、方便、維護容易。

有興趣的內容

留言
avatar-img
鼻爾蓋茲筆一下
8會員
30內容數
沙龍新手
鼻爾蓋茲筆一下的其他內容
2023/10/05
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
2023/10/05
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
2023/09/28
本篇文章又要介紹Supabase好用的實時更新功能,叫做Presence。Presence是 Supabase 提供的一項實時更新功能,讓開發者能夠輕鬆實現用戶之間的實 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supa
Thumbnail
2023/09/28
本篇文章又要介紹Supabase好用的實時更新功能,叫做Presence。Presence是 Supabase 提供的一項實時更新功能,讓開發者能夠輕鬆實現用戶之間的實 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功能應用,深入了解Supa
Thumbnail
2023/09/15
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
2023/09/15
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
看更多
你可能也想看
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
在上篇文章中Supabase的JavaScript Client Library串接實作我們實際安裝並且使用了supabase-js連接我們的supabase資料庫,並且已經測試成功。本篇文章就來導覽一下supabase-js的文件,還有在頁面裡面示範會員管理系統的登入和登出,以及在客戶端的操作。嗨
Thumbnail
在上篇文章中Supabase的JavaScript Client Library串接實作我們實際安裝並且使用了supabase-js連接我們的supabase資料庫,並且已經測試成功。本篇文章就來導覽一下supabase-js的文件,還有在頁面裡面示範會員管理系統的登入和登出,以及在客戶端的操作。嗨
Thumbnail
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
Supabase是使用PostgreSQL作為資料庫,所以當然也具有Storage的功能,能夠儲存用戶的圖片或是檔案,一樣可以設定讀取權限相當方便,一起瞭解如何操作。 從後台的大頁籤就可以進去Storage頁面,頁面和資料庫表格有點類似,如果有新增任何buckets就會顯示在All buckets的
Thumbnail
Supabase的串接方式很多元,其中在網頁前端中使用起來最簡單也最推薦的方式就是使用官方提供的supabase-js套件,該套件已經把所有REST和REALTIME的API功能包好,可以方便的在網頁中提取使用。嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什
Thumbnail
Supabase的串接方式很多元,其中在網頁前端中使用起來最簡單也最推薦的方式就是使用官方提供的supabase-js套件,該套件已經把所有REST和REALTIME的API功能包好,可以方便的在網頁中提取使用。嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什
Thumbnail
Supabase裡的每個專案都自帶一組開箱即用的會員系統和身份認證系統,只需要使用Supabase提供的SDK,不管是身份認證、登入、登出、會員管理,處理TOKEN等功能都包在裡面處理到好,相當實用。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功
Thumbnail
Supabase裡的每個專案都自帶一組開箱即用的會員系統和身份認證系統,只需要使用Supabase提供的SDK,不管是身份認證、登入、登出、會員管理,處理TOKEN等功能都包在裡面處理到好,相當實用。 嗨歡迎閱讀我的文章!這是關於Supabase的系列文章,內容包含介紹Supabase是什麼、基本功
Thumbnail
在supabase裡可以直接從客戶端讀取資料庫中的資料,在設定好RLS的前提之下,更可以對資料庫直接進行新增、修改、刪除等操作。 先進到後台選擇SQL Editor,可以來到SQL編輯器的頁面,如果是本身會寫資料庫相關的SQL內容可以直接點擊上方的New query按鈕,可以開啟一個空白頁面開始編輯
Thumbnail
在supabase裡可以直接從客戶端讀取資料庫中的資料,在設定好RLS的前提之下,更可以對資料庫直接進行新增、修改、刪除等操作。 先進到後台選擇SQL Editor,可以來到SQL編輯器的頁面,如果是本身會寫資料庫相關的SQL內容可以直接點擊上方的New query按鈕,可以開啟一個空白頁面開始編輯
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
前面文章有說明過訂閱資料庫的更新事件,讓前端畫面能夠收到更新資訊即時反應在用戶面前,那接下來要介紹Supabase的Webhooks則是能讓其他server端收到資料庫事件的通知。 這裡簡單說明一下Webhooks,一般來說是由前端主動呼叫後端API,取回資料,Webhooks則是由後端伺服器觸發某
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本篇文章主要介紹Supabase裡的Trigger的功能,詳細說明什麼是Trigger和使用時機,以及如何在後台瀏覽和設定Trigger,此外,文章中會提供一個常用的Trigger功能範例。 善用觸發器(Trigger)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大
Thumbnail
本篇文章主要介紹Supabase裡的Trigger的功能,詳細說明什麼是Trigger和使用時機,以及如何在後台瀏覽和設定Trigger,此外,文章中會提供一個常用的Trigger功能範例。 善用觸發器(Trigger)的話,能夠幫助開發者減少重複執行的工作,提高資料庫效能和安全性,可以說是一個強大
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這篇要介紹的是Supabase裡的Functions,我不知道有沒有官方的中文譯名,我都直接稱呼為函式或程式。Functions就是和任何程式語言裡面所認識的函式一樣,只差在這個Functions是在PostgreSQL裡面執行,沒有聽錯是在資料庫裡面執行的函式,文章會介紹新增的方式和做一個範例。
Thumbnail
這篇要介紹的是Supabase裡的Functions,我不知道有沒有官方的中文譯名,我都直接稱呼為函式或程式。Functions就是和任何程式語言裡面所認識的函式一樣,只差在這個Functions是在PostgreSQL裡面執行,沒有聽錯是在資料庫裡面執行的函式,文章會介紹新增的方式和做一個範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News