[TIL #51] supabase에서 view와 table 차이점 / 테이블끼리 데이터 연결하기

Bora.K | 권보라·2024년 2월 2일
0

TIL

목록 보기
51/51
post-thumbnail

오늘 한 일


게임 추천 및 커뮤니티 사이트

  • [supabase] 뷰 테이블 생성하여 좋아요, 댓글 수 불러오기

학습 내용


커뮤니티 페이지에서 게시글의 좋아요, 댓글 수를 표시하려고 하다보니 supabase에서 데이터를 가져오는 것에 어려움을 느꼈다.

posts라는 테이블에 좋아요 수와 댓글 수에 대한 정보가 따로 없고, likes와 comments를 각각의 테이블로 만들어 관리하고 있었기 때문에
likes, comments에서 posts의 id와 일치하는 값을 찾아서 그 수를 카운팅해야하는 번거로움이 있었다.

이렇게 불러오는 방법은 성능상의 효율이 떨어진다고 판단하여 이를 개선하려고 방법을 찾아보다가 supabase의 view 테이블이란 것을 알게되었다.

posts와 likes, comments 테이블을 posts의 id를 기준으로 데이터를 연결한 하나의 테이블을 만들 수 있는 것이었다.

View VS Table

supabase에서 뷰와 테이블은 모두 데이터베이스 개체이지만 서로 다른 용도로 사용된다.

테이블

Supabase의 테이블은 기존 관계형 데이터베이스의 테이블과 유사하다. 행과 열로 구성된 데이터를 저장하고 관리하는 데 사용된다. 각 행은 레코드를 나타내고, 각 열은 특정 속성 또는 필드를 나타낸다.

Supabase의 뷰는 가상 테이블로 처리될 수 있는 저장된 SQL 쿼리이다.
뷰는 데이터 자체를 저장하지 않고, 하나 이상의 테이블의 데이터를 특정 방식으로 표시하여 제공한다.

뷰는 여러 테이블을 조인하고, 필터를 적용하고, 기본 데이터에 다양한 작업을 수행하여 사용자가 원하는 정보를 조합하여 가상 테이블을 생성할 수 있다.

뷰는 복잡한 쿼리를 단순화하고, 기본 테이블과 직접 상호 작용하지 않고도 특정 데이터에 더 쉽게 검색할 수 있도록 해준다.

테이블과 뷰의 주요 차이점

1. 저장소

테이블은 실제 데이터를 저장하는 반면, 뷰는 데이터 자체를 저장하지 않는다. 하나 이상의 테이블에서 데이터를 표시하는 동적 방법을 제공한다.

2. 업데이트

테이블의 데이터는 직접 업데이트할 수 있지만 는 읽기 전용이며 기본 테이블의 데이터를 반영합니다. 뷰에 연결된 테이블의 데이터가 업데이트되면 뷰의 데이터도 연동되어 업데이트 된다.

3. 목적

테이블은 데이터를 저장하고 관리하는 데 사용되는 반면, 뷰는 기본 테이블을 수정하지 않고 특정 방식으로 데이터를 쿼리하고 표시하는 데 사용된다.

🔎 코드
우리 프로젝트의 경우 posts 테이블과 likes, comments 테이블을 각각 연결하여 posts의 좋아요 수, 댓글 수를 count한 데이터를 가져올 수 있다.

  • supabase에서 뷰를 생성하는 SQL
CREATE VIEW posts_with_counts AS
SELECT posts.*, COUNT(user_likes.post_id) AS like_count, COUNT(comments.id) AS comment_count
FROM posts
LEFT JOIN user_likes ON posts.id = user_likes.post_id
LEFT JOIN comments ON posts.id = comments.id
GROUP BY posts.id;

오늘의 회고


프로젝트를 진행하면서 supabase의 다양한 기능들을 알아가고 있다. 확실히 firebase보다 훨씬 기능도 많고 다양하게 활용할 수 있는 것 같다. 오늘 알게된 뷰 테이블의 경우 알고 있다면 활용이 매우 높을 것 같다. 뷰테이블로 간단하게 좋아요, 댓글 수 불러오기 성공!


profile
Frontend Engineers

0개의 댓글